ラムジ - PLANET.mp3
04:08
三種編程模式:
1.命令式(使用語句,循環(huán)和函數(shù)).
2.函數(shù)式(使用純函數(shù),高階函數(shù)和遞歸recursion)
3.面向?qū)ο缶幊?oop)
對(duì)象時(shí)使用類來創(chuàng)建的,而這些類實(shí)際上是oop的模具.
類描述了對(duì)象是什么,但是和對(duì)象本身是分開的.換句話說,一個(gè)類可以被描述為一個(gè)對(duì)象的藍(lán)圖,描述或定義.
類使用關(guān)鍵字class和一個(gè)包含類方法的縮進(jìn)塊創(chuàng)建的.
下面是一個(gè)簡(jiǎn)單的類和它的對(duì)象的例子:
class Cat:
def __init__(self,color,legs):
self.color=color
self.legs=legs
felix=Cat("ginger",4)
rover=Cat("dog-colored",4)
stumpy=Cat("brown",3)
這段代碼定義了一個(gè)名為Cat的類,它有兩個(gè)屬性:color和legs
然后這個(gè)類被用來創(chuàng)建這個(gè)類的3個(gè)獨(dú)立的對(duì)象.
__init__方法是一個(gè)類中最重要的方法.它被稱為類的構(gòu)造函數(shù).
所有的方法都必須以self作為自己的第一個(gè)參數(shù),雖然它沒有被明確地傳遞,但是python為自己添加了自變量
在調(diào)用方法時(shí),不需要包含它.在一個(gè)方法定義中,self指的是調(diào)用該方法的實(shí)例.
注意:__init__是兩個(gè)下劃線,不是_init_
類的實(shí)例具有屬性,這些屬性是與它們相關(guān)聯(lián)的數(shù)據(jù)片段
在這個(gè)例子中,Cat實(shí)例具有屬性color和legs.這些可以通過在一個(gè)實(shí)例之后加一個(gè)點(diǎn)和屬性名來訪問.
在__init__方法中,可以使用self.attribute來設(shè)置實(shí)例屬性的初始值.
class Cat:
def __init__(self,color,legs):
self.color=color
self.legs=legs
felix=Cat("ginger",4)
print(felix.color)
結(jié)果:
ginger
在上面的例子中,__init__方法接受兩個(gè)參數(shù)并將它們分配給對(duì)象的屬性.
類可以通過在類的主體內(nèi)分配變量來創(chuàng)建類屬性,也可以在類的主體內(nèi)定義其他方法來為其添加功能.這些可以通過從類的實(shí)例或類本身來訪問類屬性.只能通過實(shí)例來訪問自定義的方法.
例如:
class Dog:
legs=4
def __init__(self,name,color):
self.name=name
self.color=color
def bark(self):
print("woof!")
fido=Dog("Fido","brown")
print(fido.legs)
print(Dog.legs)
fido.bark()
結(jié)果:
4
4
woof!
使用Dog.bark()會(huì)報(bào)錯(cuò).
類屬性由類的所有實(shí)例共享.
嘗試訪問未定義的實(shí)例的屬性會(huì)導(dǎo)致AttributeError.這也適用于你調(diào)用未定義的方法.
繼承提供了一種在類之間共享功能的方法.
要從另一個(gè)類繼承一個(gè)類.要將超類(父類)放在類名后面的括號(hào)中.
例如:
結(jié)果:
brown
woof!
從另一個(gè)類繼承的類稱為子類
被繼承的被稱為超類
如果一個(gè)類繼承了另一個(gè)具有相同屬性或方法的類,它們的屬性和方法將覆蓋它們.
結(jié)果:
woof!
繼承也可以是間接的.比如,一個(gè)類B繼承類A,類C也可以繼承類B.但是不允許A繼承B(不允許循環(huán)繼承)
super函數(shù)是一個(gè)與父類繼承相關(guān)的函數(shù),它可以用來在對(duì)象的超類中找到具有特定名稱的方法.
例如:
class A:
def spam(self):
print(1)
class B(A):
def spam(self):
print(2)
super().spam()
B().spam()
結(jié)果:
2
1
super().spam()是調(diào)用超類的spam方法
每天堅(jiān)持進(jìn)步一點(diǎn)點(diǎn).