好用的Decorator 如何在class中使用?

Decorator是什麽?
Python Decorator 机制是为了让你在定义函式与方法之後,可以用简单的方式来修改并重新定义。
引用自Decorator 装饰器初探

装饰器,最简单的理解就是额外的效果。类似在游戏中只要戴了什麽配件之後就会出现哪些特殊的效果,这就是装饰器最大的用处。

装饰器在Class 中无法使用的原因是没有把Self 传入,所以会报错
解法:

  1. 写一个功能然後把Self 传入当成args[0] 就可以解决这问题
def initComomPortCheck(f):
	def warp(*args):
		ret = f(*args)
		args[0].comPortCheck()
		return ret
	return warp

def comPortCheck(self):
	"""Pre-check if the com port is avaiable or not
	   Usage:
		@pre_comPortCheck
		def ....
	"""
	ports = [port[0] for port in serial.tools.list_ports.comports()]
		if not len(self.ui.le_ComID.text()) > 0:
			print("Error")
			return
		if "COM{0}".format(self.ui.le_ComID.text()) in ports:
			print("connected")
		else:
			print("disconnect")
			return
Class xxx():
    ....
    ....
    
    @initComomPortCheck
    def func()
        ...
        ...
        
        

结论:
网路上还有很多种作法,但就看自己如何选择哪个好用的方式了,笔者用偷懒的方式做了一个。


<<:  Day15.进入 ARM 世界: ARM Cortex-M Programming

>>:  D3JsDay13 让资料拥有过渡动画,让各位观众看见神话—过渡动画

[Day-22] 呼叫自订函式小练习

上次练习完了自订函式的基础 今天就要来练习相关题目罗~ 题目: 1.计算:键盘输入任一整数a,计算2...

Day 30 : 妈!我完赛了!

没错各位!今天是最後一天!很突然的就完赛了,我跟同学们说的时候,大家都相当错愕,前阵子才听我说要参加...

案例:AWS MLOps Framework - AWS CloudFormation 模板,部署单帐号版本

此解决方案使用 AWS CloudFormation 来自动化部署。它包括以下两个模板 — 单帐户部...

Day 10 - 主动学习 Active Learning

不幸的,在需要data 情况下,但通常收集data所耗费成本却很贵或不可能收集全, 我们可用利用Ac...

30天学会C语言: Day 24-排序

用於排序的演算法有很多种,其中一种是 气泡排序法 #include<stdio.h> #...