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

2018-08-19  本文已影响0人  派克_i

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)

* 总结

如果需要在类外修改类属性,必须通过类对象去引用然后进行修改。如果通过实例对象去引用,会产生一个同名的实例属性,这种方式修改的是实例属性,不会影响到类属性,并且之后如果通过实例对象去引用该名称的属性,实例属性会强制屏蔽掉类属性,即引用的是实例属性,除非删除了该实例属性。

上一篇下一篇

猜你喜欢

热点阅读