python面向對象

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章