美文网首页
实例属性,类属性,实例方法,类方法,静态方法

实例属性,类属性,实例方法,类方法,静态方法

作者: 鲸随浪起 | 来源:发表于2018-11-26 17:15 被阅读0次

    实例方法、静态方法和类方法

    三种方法在内存中都归属于类,区别在于调用方法不同
    实例方法:由对象调用;至少一个self参数;执行实例方法时,自动将调用该方法的对象赋值给self
    类方法:由类调用;至少有一个cls参数;执行类方法时,自动将调用该方法的类赋值给cls
    静态方法:由类调用;无默认参数;

    实例属性属于对象
    类属性属于类

    实例方法中self指向了实例对象
    类方法可以通过函数调用和修改类属性,类方法中的cls指向了类对象
    静态方法为了能干一些事情还不需要传参数,并归纳成一类

    class Abc:
        num = 11  #类属性
        def __init__(self):
            self.name = "hello"  #实例属性
        def a(self):  #实例方法
            return self.name
        @classmethod  #类方法
        def b(cls):
            return cls.num
        @staticmethod  #静态方法
        def c():
            return self.name
    if __name__ == '__main__':
        abc = Abc()
        print(abc.num)
        print(abc.b())
        print(abc.a())
    

    类属性

    class People:
        name = 'Tom'    #公有的类属性
        __age = 15      #私有的类属性
        @classmethod
        def a(cls):
            return cls.__age
    p = People()
    print(p.name)   #正确
    print(People.name)  #正确
    print(p.__age)  #错误,不能再类外通过实例对象访问私有的类属性
    print(People.__age) #错误,不能再类外通过实例对象访问私有的类属性
    print(p.a())    #正确,通过类方法拿到私有类属性
    

    实例属性

    class People:
        address = '山东'  #类属性
        def __init__(self):
            self.name = 'xiaowang'  #实例属性
            self.age = 20   #实例属性
    p = People()
    p.age = 12  #实例属性   通过类修改实例属性
    print(p.address)    #正确
    print(p.name)   #正确
    print(p.age)    #正确
    
    print(People.address)   #正确
    print(People.name)  #错误
    print(People.age)   #错误
    

    通过实例(对象)去修改类属性

    class People(object):
        country = 'china'   #类属性
    
    print(People.country)
    p = People()
    print(p.country)
    
    p.country = 'japan'
    print(p.country)    #实例属性会屏蔽掉通欧明的类属性
    print(People.country)
    
    del p.country   #删除实例属性
    print(p.country)
    

    相关文章

      网友评论

          本文标题:实例属性,类属性,实例方法,类方法,静态方法

          本文链接:https://www.haomeiwen.com/subject/rvobqqtx.html