- 習(xí)題45 對象、類、以及從屬關(guān)系
class Animal():
pass
class Dog(Animal):
# 從Animal()父類繼承雕沿,創(chuàng)建一個Dog()字類
def __init__(self, name):
self.name = name
class Cat(Animal):
def __init__(self, name):
self.name = name
class Person():
def __init__(self, name):
# 初始化屬性name
self.name = name
# 指定屬性pet默認(rèn)值為None
self.pet = None
'''
def __init__(self, name):
__init__是一個特殊的方法贴捡,包含必不可少的self形參以及需要傳遞參數(shù)的其他形參,此處為name
以self為前綴的變量都可供類中的所有方式使用
self.name = name 獲取存儲在形參name中的值法严,并將其存儲到變量name中损敷,然后該變量被關(guān)聯(lián)到當(dāng)前創(chuàng)建的實(shí)例
'''
class Employee(Person):
def __init__(self, name, salary):
super(Employee, self).__init__(name) ## 初始化父類的屬性
'''
super是個特殊的函數(shù),幫助python將父類和子類關(guān)聯(lián)起來深啤。
這行代碼讓python調(diào)用Person()父類的方法__init__()拗馒,
讓Employee()實(shí)例包含父類Person的所有屬性。
python3.6中的代碼寫法為super().__init__(name)
'''
self.salary = salary
class Fish():
pass
class Salmon(Fish):
pass
class Halibut(Fish):
pass
# 創(chuàng)建實(shí)例
rover = Dog("Rover")
satan = Cat("Satan") # 創(chuàng)建Cat()實(shí)例溯街,傳遞參數(shù)Satan給形參name,然后關(guān)聯(lián)到當(dāng)前創(chuàng)建的一只名為Satan的貓的實(shí)例
mary = Person("Mary")
mary.pet = satan # 訪問實(shí)例的屬性诱桂,設(shè)置Person()類中pet的值為satan,調(diào)用實(shí)例中的方法也是句點(diǎn)調(diào)用發(fā),marry.f()
frank = Employee("Frank", 120000)
frank.pet = rover
flipper = Fish()
course = Salmon()
harry = Halibut()
心得體會:
- 習(xí)題43呈昔、44制作游戲并打分我就沒有去做了挥等,太耗費(fèi)時間。時間有限的前提下堤尾,我還是把41触菜、42的代碼好好多看幾遍,理解理解
- 在實(shí)際使用過程中哀峻,我們先抽象一類具體事物和情景涡相,將其通用行為編寫成類。
- 基于類創(chuàng)建對象時剩蟀,每個對象都具有這個類的通用行為催蝗。根據(jù)類來創(chuàng)建對象被稱為實(shí)例化。
- 除了創(chuàng)建新的類育特,我們還可以從另一個類去繼承某些屬性和方法丙号。比如從Dog()類繼承,創(chuàng)建一個Husky(Dog),這個哈士奇除了繼承了通常意義上狗的特征意外缰冤,還有一些自己獨(dú)特的特征犬缨,比如活潑、溫順等等棉浸,這些獨(dú)有特征可以在Husky(Dog)類下添加
- 注意點(diǎn):
①在python2.7中從空白創(chuàng)建類是需要在類名稱后面的括號內(nèi)包含單詞object,python3.6可以為空怀薛,在繼承父類時括號內(nèi)是父類的名稱
②python3.6中從一個類創(chuàng)建一個新類叫做繼承,也就是《笨辦法學(xué)Pyhton》里描述的“兩者以類的方式相關(guān)聯(lián)”