特殊方法和装饰器
Posted naniandiam
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了特殊方法和装饰器相关的知识,希望对你有一定的参考价值。
1 # 多继承 2 class A: 3 def show(self): 4 print(‘AAAA‘) 5 6 class B: 7 def fun(self): 8 print(‘BBBB‘) 9 10 class C(B,A): 11 pass 12 13 x = C() 14 15 16 # 类的特殊方法 17 ‘‘‘ 18 类属性: 19 __dict__ : 类的属性(包含一个字典,由类的数据属性组成) 20 __doc__ :类的文档字符串 21 __name__: 类名 22 ‘‘‘ 23 x = ‘a\nb‘ 24 #print(repr(x)) 25 #实例调用: 26 ‘‘‘ 27 __init__ 初始化 28 __repr__ c1 29 __str__ print (c1 )(如果类里面先定义了__repr__的话print x时也会返回对应的 30 __call__ c1() 使实例可被调用 31 ‘‘‘ 32 class Rectangle: 33 def __init__(self,width,height): 34 self.width = width 35 self.height = height 36 def __str__(self): 37 return ‘宽为%s,高为%s‘%(self.width,self.height) 38 def __repr__(self): 39 return ‘面积为%s‘%self.area() 40 def __call__(self): 41 return ‘哈哈哈 ‘ 42 def area(self): 43 return self.width*self.height 44 def __add__(self,other): 45 if isinstance(other,Rectangle): 46 return self.area()+other.area() 47 48 c1 = Rectangle(3,4) 49 c2 = Rectangle(5,6) 50 # 运算符魔法方法: 51 ‘‘‘ 52 __add__(self,other) x+y 53 __sub__(self,other) x-y 54 __mul__(self,other) x*y 55 __mod__(self,other) x%y 56 __iadd__(self,other) x+=y 57 __isub__(self,other) x-=y 58 __radd__(self,other) y+x 59 __rsub__(self,other) y-x 60 __imul__(self,other) x*=y 61 __imod__(self,other) x%=y 62 ‘‘‘ 63 # 装饰器 64 ‘‘‘ 65 @property 装饰过的函数返回的不再是一个函数,而是一个property对象 66 装饰过后的方法不再是可调用的对象,可以看做数据属性直接访问。 67 @staticmethod 把没有参数的函数装饰过后变成可被实例调用的函数, 68 函数定义时是没有参数的。 69 @classmethod 把装饰过的方法变成一个classmethod类对象,既能能被类调用又能被实例调用。 70 注意参数是cls代表这个类本身。而是用实例的方法只能被实例调用。 71 ‘‘‘ 72 class Rectangle: 73 def __init__(self,width,height): 74 self.width = width 75 self.height = height 76 @property 77 def area(self): 78 return self.width*self.height 79 @staticmethod 80 def fun(): 81 return ‘xxxxxx‘ 82 @classmethod 83 def show(cls): 84 print(cls) 85 return ‘YYYY‘ 86 c1 = Rectangle(3,4) 87 def fun1(ff): 88 def fun2(y): 89 return ff(y)+100 90 return fun2 91 92 @fun1 #ff = fun1(ff) # x=ff 93 def ff(y): 94 return y*y 95 96 def filterarg(x): 97 def fit(*arg): 98 if len(arg) == 0: 99 return 0 100 for i in arg: 101 if not isinstance(i,int): 102 return 0 103 return x(*arg) 104 return fit 105 106 #@filterarg 107 def sums(*arg): 108 return sum(arg) 109 110 filterarg(sums)(3,4,5) 111 112 @filterarg 113 def average(*arg): 114 print(arg) 115 return sum(arg)/len(arg)
以上是关于特殊方法和装饰器的主要内容,如果未能解决你的问题,请参考以下文章
python-flask复习—— 装饰器的坑及解决办法flask中的路由/实例化配置/对象配置/蓝图/特殊装饰器(中间件重定义错误页面)