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)

  结果如下图

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

原文地址:https://www.cnblogs.com/xiaobeibei26/p/6436380.html