美文网首页
#类方法,多态类型,类属性

#类方法,多态类型,类属性

作者: 派克_i | 来源:发表于2018-08-19 06:39 被阅读0次

    1、类方法

    class People(object):
    
    #类方法 classmethod来劲修饰
    @classmethod
    def getCountry
        return cls.country
    
    p = People()
    print(p.getCountry()) #可以通过实例引用
    print(People.getCountry()) #可以通过类对象引用
    

    2.类方法还有一个用途就是可以对类属性进行修改

    class People(object):
    country = 'china'
    
    #类方法,用classmethod来进行修饰
    @classmethod
    def getCountry(cls):
    return cls.country
    
    @classmethod
    def setCountry(cls,country):
    cls.country = country
    
    
    p = People()
    print p.getCountry() #可以用过实例对象引用
    print People.getCountry() #可以通过类对象引用
    
    p.setCountry('japan')
    
    print p.getCountry()
    print People.getCountry()
    

    3.多态类型

    class duck():
    def walk(self):
    print('I walk like a duck')
    def swim(self):
    print('i swim like a duck')
    
    class person():
    def walk(self):
    print('this one walk like a duck')
    def swim(self):
    print('this man swim like a duck')
    
    
    class F1(object):
    def show(self):
    print 'F1.show'
    
    class S1(F1):
    
    def show(self):
    print 'S1.show'
    
    class S2(F1):
    
    def show(self):
    print 'S2.show'
    
    def Func(obj):
    print obj.show()
    
    s1_obj = S1()
    Func(s1_obj)
    
    s2_obj = S2()
    Func(s2_obj)
    

    4.类属性

    class People(object):
    name = 'Tom' #公有的类属性
    __age = 12 #私有的类属性
    
    p = People()
    
    print(p.name) #正确
    print(People.name) #正确
    print(p.__age) #错误,不能在类外通过实例对象访问私有的类属性
    print(People.__age) #错误,不能在类外通过类对象访问私有的类属性
    

    5.实例属性(对象属性)

    class People(object):
    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) #错误
    

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

    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/vygqiftx.html