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)
结果如下图

概括起来,类里面主要结果如下


浙公网安备 33010602011771号