class People():
address = 'china'
def __init__(self,name='chen'):
self.__name = name
def sayHi(self):
return 'hi,'+self.__name
#类属性的动态加载
#如果类People不包含属性age,并不会报错,而是会动态添加一个属性
People.age = 25
p1 = People('simon')
print p1.age
#实例实际上是类的一个拷贝
#如果在实例上修改类属性,它实际上并没有修改类属性,而是给实例绑定了一个实例属性。
p1.address = 'japan'
p2 = People('duoduo')
print p2.address #china
print People.address #china
#类中定义的方法其实上也是一个属性,它实际上是函数对象
#p2.sayHi返回的是一个函数对象,但这个函数是一个绑定到实例的函数,p2.sayHi()才是方法调用。
print p2.sayHi #<bound method People.sayHi of <__main__.People instance at 0x0000000002780DC8>>
print p2.sayHi() #hi,duoduo
class Person():
__count1 = 0
__count2 = 0
@classmethod
def how_many1(cls):
return cls.__count1
@classmethod
def how_many2(cls):
return cls.__count2
def how_many3(self):
return self.__count1
def __init__(self,name):
self.name = name
self.__count1 = self.__count1 + 1 #self代表的是实例
Person.__count2 = Person.__count2 + 1 #Person代表的是类,注意书写方式
print Person.how_many1()
print Person.how_many2()
p3 = Person('Bob')
print Person.how_many1()
print Person.how_many2()
#print Person.how_many3() #不能通过类来访问实例方法,必须通过类的实例来访问,如p1.how_many3()
print p3.how_many1()
print p3.how_many2()
print p3.how_many3()
print id(p3)
p4 = p3
p3.name = 'chen'
print id(p3)
print id(p4)
print p4.name #chen
python面向对象
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.