'''
类方法
·是类对象所拥有的方法,需要用修饰器@classmethod来标识其为类方法,
·对于类方法,第一个参数必须是类对象,一般以cls作为第一个参数
·(当然可以用其他名称的变量作为其第一个参数)
·能够通过实例对象和类对象去访问。
'''


class Person:
    sex = "male"

    def __init__(self, name):
        self.name = name

    # 类方法,用classmethod来进行修饰
    # 访问类属性
    @classmethod
    def getSex(cls):
        return cls.sex

    # 修改类变量
    @classmethod
    def setSex(cls, sex):
        cls.sex = sex

    '''
    静态方法
        @staticmethod来进行修饰,静态方法不需要多定义参数
    '''

    @staticmethod
    # 静态方法
    def getSexII():
        return Person.sex

    # 实例方法
    def tell(self):
        print("我是%s" % (self.name))


if __name__ == '__main__':
    p = Person("fate")
    print(p.getSex())
    print(p.getSexII())

    '''
    总结
    1、类方法的第一个参数是类对象cls:引用的必定是类对象的属性和方法
    2、实例方法的第一个参数是实例对象self:那么通过self引用的可能是类属性、
                                     也有可能是实例属性(这个需要具体分析)
    3、静态方法中不需要额外定义参数:必须通过类对象来引用

    classmethod与staticmethod有何区别?
    主要区别首先是classmethod有cls参数,staticmethod没有,其次classmethod可以使用类成员变量和其他类方法,
    而staticmethod只是一个普通方法,只是绑定到类上而已,
    另外staticmethod不能被重载。
    '''

results matching ""

    No results matching ""