python 类组合_python类与对象的组合与继承
1、把類的對象實(shí)例化放到一個(gè)新的類里面叫做類的組合,組合就是指幾個(gè)橫向關(guān)系的類放在一起,縱向關(guān)系的類放在一起是繼承,根據(jù)實(shí)際應(yīng)用場景確定。簡單的說,組合用于“有一個(gè)”的場景中,繼承用于“是一個(gè)”的場景中。例如,水池里有一個(gè)烏龜,天上有一個(gè)鳥,地上有一個(gè)小甲魚,這些適合使用組合。青瓜是瓜,女人是人,鯊魚是魚,這些就應(yīng)該使用繼承啦實(shí)例如下:
class Turtle:
def __init__(self,x):
self.num = x
class Fish:
def __init__(self,x):
self.num = x
class Pool:
def __init__(self, x, y):
self.turtle = Turtle(x)
self.fish = Fish(y)
def print_num(self):
print("水池總共有烏龜 %d 只,小魚 %d 只" % (self.turtle.num,self.fish.num))
pool = Pool(1,10)
pool.print_num()
2、類、類對象和實(shí)例對象
當(dāng)你這個(gè)類定義完的時(shí)候,類定義就變成類對象,可以直接通過“類名.屬性”或者“類名.方法名()”引用或使用相關(guān)的屬性或方法。
3、對于類的應(yīng)用,我們一般不要試圖定義出類的所有特性和方法,應(yīng)該利用繼承和組合的機(jī)制來進(jìn)行擴(kuò)展,另外,我們還可以利用不同的詞性來進(jìn)行命名,對于屬性一般是用名詞,對于方法名一般用動詞。
4、綁定
Python嚴(yán)格要求方法需要有實(shí)例才可以被調(diào)用,這種限制其實(shí)就是python所謂的綁定。
5、在一個(gè)類中定義一個(gè)變量,用于跟蹤該類有多少個(gè)實(shí)例被創(chuàng)建(當(dāng)實(shí)例化一個(gè)對象,這個(gè)變量+1,當(dāng)銷毀一個(gè)對象,這個(gè)變量自動-1):
實(shí)現(xiàn)代碼如下:
class C:
count = 0
def __init__(self):
C.count += 1
def __del__(self):
C.count -= 1
6、定義一個(gè)棧(Stack)類,用于模擬一種具有后進(jìn)先出(LIFO)特性的數(shù)據(jù)結(jié)構(gòu)。至少需要有以下方法:
方法名
含義
isEmpty()
判斷當(dāng)前棧是否為空(返回 True 或 False)
push()
往棧的頂部壓入一個(gè)數(shù)據(jù)項(xiàng)
pop()
從棧頂彈出一個(gè)數(shù)據(jù)項(xiàng)(并在棧中刪除)
top()
顯示當(dāng)前棧頂?shù)囊粋€(gè)數(shù)據(jù)項(xiàng)
bottom()
顯示當(dāng)前棧底的一個(gè)數(shù)據(jù)項(xiàng)
實(shí)現(xiàn)代碼如下:
class Stack:
def __init__(self):
self.stack = []
def Isempty(self):
if len(self.stack) == 0:
self.Isempty1=True
print(self.Isempty1)
else:
self.Isempty1 = False
print(self.Isempty1)
def push(self,x):
self.stack.append(x)
def pop(self,y):
if len(self.stack) == 0:
print("我為空的,不能夠彈出")
else:
self.stack.pop(y)
def top(self):
if len(self.stack) == 0:
print("我為空的,不能夠彈出")
else:
print(self.stack[len(self.stack)-1])
def bottom(self):
if len(self.stack) == 0:
print("我為空的,不能夠彈出")
else:
print(self.stack[0])
a = Stack()
a.Isempty()
a.pop(2)
a.push(3)
a.push(4)
a.push(5)
a.top()
a.bottom()
總結(jié)
以上是生活随笔為你收集整理的python 类组合_python类与对象的组合与继承的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用leda没有java enterpri
- 下一篇: vs debug 模式生成的exe 另一