python-类-静态属性(数据属性)、类方法、静态方法

(介绍了三个装饰器)

1.静态属性(数据属性)

2.类方法

3.静态方法

class A:

    name = '小明'   # 类A的数据属性
    age = 2
    n = 1

    def __init__(self):
        self.name1 = 12

    def shuju(self):    # a = A()==> 调用:a.shuju()  类似 a.name
        print('我是类A的一个方法')

    @property   # 把类的函数属性变为数据属性,也就是封装成了数据属性,在通过实例访问时不用加括号
    def shuju1(self):       # a = A()==> 调用:a.shuju1  类似 a.name
        print('我被装饰成了数据方法')
        return self.name,self.age

    # python 调用类中的函数方法时,需要先实例化,再通过self建立与方法的连接,从而调用
    # 如果只想执行类的方法,不想跟任何实例有捆绑,则可以用classmethod装饰器
    # 表示装饰器下面的方法是专门给类用的,实例不能用哦!

    @classmethod        # 不用实例化,直接通过类名调用里面的方法:A.lei() #会自动把类本身传给cls
    def lei(cls):   # cls 相当于A类的自身,就像实例化之后的self
        print(cls)
        print('----',cls.n)   # 等效于:A.n

    # @property :只与实例绑定,把类的方法变为数据属性,
    # @classmethod :只与类绑定
    # @staticmethod :不跟类绑定也不跟实例绑定。静态方法  也叫类的工具包

    @staticmethod   # 可以用类调用:A.wash_body("小狗","小猫","小马"); 也可以用实例调用:aa = A(); aa.wash_body("小狗","小猫","小马")
    def wash_body(a, b, c):
        print("%s %s %s 正在洗澡" %(a, b, c))

总结:

@property :只与实例绑定(所以有:self代表实例自身),把类的方法变为数据属性

@classmethod :只与类绑定(所以有:cls代表类自身)

@staticmethod :不跟类绑定也不跟实例绑定(所有没有默认参数)。
静态方法只在内存中生成一个,节省开销,(也叫类的工具包)

普通方法每个实例对象都拥有独立的一个,开销较大

你可能感兴趣的:(装饰器,静态属性,静态方法)