python@staticmethod&@classmethod&property的懂得

python@staticmethod&@classmethod&property的理解

 

 

#!/usr/bin/evn python
#_*_coding:utf8_*_


class myClass(object):
    age = 30
    def __init__(self,name):
        self.name = name
    def sayhi1(self):#只可实例中调用
        print("sayhi1...name:{}.age:{}".format(self.name,self.age))
    @staticmethod  #静态方法不可访问构造方法中的变量,可在实例中调用,也可类中调用
    def sayhi2(age=10):#不可以传self,即不可访问self.name,self.age
        print("sayhi2..@staticmethod..{},{}".format(myClass.age,age))
    @classmethod #类方法不可以访问__init__构造方法中的变量,可在实例中调用,也可以类中调用
    def sayhi3(self,test='实例中调用'):#可传self,只能访问类变量,不可访问构造方法中的变量
        print("sayhi3..@classmethod..age:{},{}".format(self.age,test))
    @property #属性方法:必须要返回值,只可当属性使用,不可调用。把一个方法变成静态属性给予访问,实例中可访问
    def sayhi4(self,name='实例中..'):#可访问类变量及构造方法中的变量
        print("sayhi4..@property..name:{},age{},{}".format(self.name,self.age,name))
        return self.name,self.age
    @property
    def sayhi5(self):
        print("sayhi5..@property....age{}".format(self.age))
        return self.age




if __name__ == '__main__':
    m = myClass('dodo')
    m.sayhi1()
    #myClass.sayhi1()
    print("-----@staticmethod调用-------")
    m.sayhi2('实例中调用...')
    m.sayhi2()
    myClass.sayhi2('类中外部调用...')
    myClass.sayhi2()
    print("-----@classmethod调用--------")
    m.sayhi3()
    myClass.sayhi3('类中调用')
    print("-----@property调用-----------")
    print(m.sayhi4)
    print(myClass.sayhi4)
    print(myClass.sayhi5)
    print(m.sayhi5)