Python面相对象之类里面常用的装饰器(3)
在类里面,可以设置类的全局变量,也就是静态字段,让实例化的所有对都具有该属性
class god: country = 'china'#这个字段在类里面保存,只有一份,叫静态字段,表示每个对象具有的属性 def __init__(self,name): self.name =name#普通字段,保存在实例化之后的对象中 def shit(self):#普通方法,保存在类中,实例化之后的对象也可以通过反射找到类方法,如hasattr print('shit') def she(self): print('黄赌毒') obj = god('Jay') print(obj.country)
类里面有几个常用的装饰器
class god: country = 'china' def __init__(self,name): self.name =name @classmethod#这个是类方法,保存在类里面,通过类直接调用 def xxxx(cls):#必须要有cls参数,全称class,方法被调用时候类名被当做cls传进去,相对于静态方法的特殊情况,就是多了一个参数 print('xxxxx',cls) def shit(self): print('shit') @staticmethod#这是静态方法,装饰类里面的方法,使该方法变为静态方法,没有了self,保存于类里面 def she(): print('黄赌毒') god.she()#静态方法直接使用类调用,一般静态方法都使用类访问 god.xxxx() print(god) obj = god('Jay') obj.she()#实例也可以直接调用,但不被建议
执行结果如图
还有一个property
class god: country = 'china' def __init__(self,name): self.name =name @property#原来通过实例的调用(加括号)才能访问,现在通过字段就能访问了,实际是将方法伪造成了字段 def shit(self):#这个特性不能再传参数了 return '%s shit' % self.name obj = god('Jay') r1=obj.shit print(r1)
结果如图
我们也可以用shit.setter装饰器更改获得的字段
如下代码,不过这些方法很少用
class god: country = 'china' def __init__(self,name): self.name =name @property#原来通过实例的调用(加括号)才能访问,现在通过字段就能访问了,实际是将方法伪造成了字段 def shit(self):#这个特性不能再传参数了 return '%s shit' % self.name @shit.setter#这个方法用于接收传回来的参数,进行一些更改,专门用于设置 def shit(self,value): print(value) self.name=value#更改属性 obj = god('Jay') print(obj.shit) obj.shit='b' print(obj.name)
结果如下图
概括起来,类里面主要结果如下