輕松學(xué)會(huì)python面向?qū)ο蟮?篇---類與對(duì)象的關(guān)系
對(duì)象,實(shí)例,對(duì)象實(shí)例,他們是同一個(gè)事物的不同叫法。對(duì)象是由類創(chuàng)建出來(lái)的,類與對(duì)象之間,究竟是什么關(guān)系呢?
1. 不是父子關(guān)系
首先明確,他們之間不是父子關(guān)系。

在本系列的第5篇教程中,舉例定義了Dog類和HuntDog,HuskyDog,GoldenDog,三個(gè)類,這三個(gè)類繼承了Dog類。
Dog類與這三個(gè)類之間是父子關(guān)系,Dog是父類,HuntDog等類是子類。這三個(gè)子類之間是兄弟關(guān)系。
只有相同事物之間才能夠存在父子關(guān)系,兄弟關(guān)系。類與對(duì)象,顯然是兩個(gè)不同的事物,否則也不會(huì)起不一樣的名字。
2. 類是設(shè)計(jì)圖紙
想要建一座大樓,需要設(shè)計(jì)圖紙,想要建造一艘輪船,需要設(shè)計(jì)圖紙,想要造一架戰(zhàn)斗機(jī),需要設(shè)計(jì)圖紙,以此類比,想要?jiǎng)?chuàng)建一個(gè)對(duì)象,需要一個(gè)類。

類,就好比是設(shè)計(jì)圖紙,對(duì)象則是根據(jù)設(shè)計(jì)圖紙創(chuàng)建出來(lái)的。類定義了屬性,定義了方法,對(duì)象被創(chuàng)建出來(lái)以后,自然就有了這些屬性和方法。
用之前文章的例子
class Dog():
def __init__(self, _name, _age):
self.name = _name
self.age = _age
def eat_moon(self):
print("天狗吃月")
dog = Dog('二哈', 3)
print(dog.name) # 二哈
print(dog.age) # 3
類Dog是設(shè)計(jì)圖紙,dog是根據(jù)設(shè)計(jì)圖紙創(chuàng)建出來(lái)的對(duì)象。
在做設(shè)計(jì)時(shí),規(guī)定了__init__方法有兩個(gè)參數(shù),因此在創(chuàng)建對(duì)象時(shí),必須傳入兩個(gè)實(shí)參,__init__方法的功能是為對(duì)象初始化,既然設(shè)計(jì)圖紙這樣要求了,那作為工人,就得按照設(shè)計(jì)圖紙的要求來(lái)辦事。
3. 兩者的數(shù)量關(guān)系
對(duì)象可以有多個(gè),而類只有一個(gè)。這不難理解,設(shè)計(jì)圖紙有一份就足夠了,一份建造飛機(jī)的圖紙,你可以根據(jù)圖紙建造出100架飛機(jī)。
有時(shí)候,我們希望一個(gè)類只能創(chuàng)建出一個(gè)對(duì)象,這就是單例模式,在定義類的時(shí)候,需要做點(diǎn)特殊處理才能滿足這樣的要求。
