Python中的類 俗話說,物以類聚,人以群分,類是什麼,類就是一組相同屬性的集合。下麵來結合人,探討Python中類和人類的關係。 首先,我們定義一個人的類,如下: 上面代碼中,我們定義了一個人的類,人都有姓名,年齡,性別,血型等屬性,還有說話,學習,走路等方法;並且我們創建了兩個人,一男一女," ...
Python中的類
俗話說,物以類聚,人以群分,類是什麼,類就是一組相同屬性的集合。下麵來結合人,探討Python中類和人類的關係。
首先,我們定義一個人的類,如下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB")
上面代碼中,我們定義了一個人的類,人都有姓名,年齡,性別,血型等屬性,還有說話,學習,走路等方法;並且我們創建了兩個人,一男一女,"Wupeiqi"和"Alex",下麵我們來一步一步完善這兩個人。
我們知道,男人有喉結,女人會生小孩,這兩個是男,女的區別,也是各自獨有的屬性。那麼給"wupeiqi"和"Alex"添加這種屬性。如下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB") p1.birth = "Woman can give birth to a baby" #給女人添加生孩子功能 p2.adam = "Man has Adam's apple" #給男人添加喉結屬性
我們知道,男人和女人都有學習的功能,我們人類自己有人會說英語,有人會說日語,總之各種各樣的語言,這些是個體所具有的屬性,比如"wupeiqi"會說日語,"Alex"會說英語,我們來實現一下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB") p1.birth = "Woman can give birth to a baby" #給女人添加生孩子功能 p2.adam = "Man has Adam's apple" #給男人添加喉結屬性 p1.language1 = "Japanese" p2.language2 = "English" print("{0} is can speak {1}".format(p1.name,p1.language1)) #列印wupeiqi說的語言 print("{0} is can speak {1}".format(p2.name,p2.language2)) #列印ALex說的語言 print("%s is can speak %s" %(p1.name,p1.language2)) #看wupeiqi是否會說英語 print("%s is can speak %s" %(p2.name,p2.language1)) #查看Alex是否會說日語 主要是看語言能力能否交叉
運行結果如下:
wupeiqi is can speak Japanese
Alex is can speak English
Traceback (most recent call last):
File "/home/zhuzhu/第七天/人類.py", line 33, in <module>
print("%s is can speak %s" %(p1.name,p1.language2)) #看wupeiqi是否會說英語
AttributeError: 'People' object has no attribute 'language2'
從上面代碼可以看出,"wupeiqi"會說日語,但是"Alex"不具有"wupeiqi"的能力。這就像我們人類一樣,你具備的能力,別人是不一定具備的,別人具備的能力,你也是不一定有的。類就像人類世界一樣。我們可以創建屬性,不一樣的能力,共有的能力。再比如,我們知道,我們都會說話,但是有些人生病了,或者天生有缺陷,不具備這種能力,我們可以拿走這些能力,如下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB") p1.walk() p2.walk()
運行如下:
wupeiqi can walk!!!!
Alex can walk!!!!
上面代碼中,我們可以看出,本來Alex和wupeiqi都會跑,現在突然出現一點小情況,Alex不會跑了(當然這隻是假設),如下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB") print(People.walk," ",p1.walk) p1.walk() p2.walk() del People.walk # try: # delattr(p2,"walk") # except AttributeError: # print("方法不能刪除嗎!!!!?") p1.walk() p2.walk()
運行結果如下:
wupeiqi can walk!!!!
Alex can walk!!!!
Traceback (most recent call last):
File "/home/zhuzhu/第七天/人類.py", line 37, in <module>
p1.walk()
AttributeError: 'People' object has no attribute 'walk'
從上面代碼可以看出,創建的實例是不能刪除類中的方法的,類中的方法不支持刪除,下麵來看看對類中的屬性進行操作:
我們讓"wupeiqi"成為無名氏,如下:
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def walk(self): '''創建走路方法''' print("%s can walk!!!!" %self.name) def speak(self): """創建說話的屬性""" print("%s can speak!!" %self.name) def learn(self): '''創建學習的屬性''' print("%s is learning." %self.name) p1 = People("wupeiqi",18,"女","0") p2 = People("Alex",8,"男","AB") print(p1.name,p2.name) del p1.name print(p1.name,p2.name)
運行結果如下:
wupeiqi Alex
Traceback (most recent call last):
File "/home/zhuzhu/第七天/人類.py", line 29, in <module>
print(p1.name,p2.name)
AttributeError: 'People' object has no attribute 'name'
從上面運行結果可以看出,我們刪除了類中的屬性,即屬性是可以修改和刪除的,我們讓"wupeiqi"成為了無名氏,不在具有名字了。
從上面可以看出,類中,我們只能修改和刪除類的屬性,不能刪除類的方法。
類和人類是一樣的,都是封裝一個大致的屬性,可以創建無數個個體,每個個體都有自己獨特的屬性,我們可以通過添加屬性進行添加,也會有很多不同的技能和方法。我們都能夠實現類中個體實例的完善。
就如我們人類自己一樣,我們缺少某個屬性,我們可以通過自己的努力去獲取。
類就是對現實生活世界的描述。
class People(object): '''創建人類''' def __init__(self,name,age,sex,blood_type): """人具有姓名,年齡,性別,血型的屬性""" self.name = name self.age = age self.sex = sex self.blood_type = blood_type def write(self,write_abality=False): '''創建寫作的能力,不是每個人都具有寫作的功能,所以需要進行判斷''' if write_abality == False: print("Sorry,%s is a illiteracy,so %s cann't have the ability of writing!" %(self.name,self.name)) elif write_abality == True: print("%s is a professional in an and literature,%s can write!" %(self.name,self.name)) else: print("Sorry,cann't identify the parameter of %s." %write_abality) def walk(self): print("%s can walking!") p1 = People("Alex",18,"Female","AB") p1.write("Alex")
我們知道,有些人會寫,有些人不會寫,所以我們要進行判斷,判斷這個人是否具有寫這個屬性,如果有,就能夠寫;如果沒有,就不具備。因而要加上一個判斷。這樣就能查看是否具有寫的功能。
現實世界很多東西需要我們去學習,現在對類的掌握還不是很徹底,尤其是不知道如何描述現實世界,這個還需要自己去積累。