1. 程式人生 > 實用技巧 >Python之面向物件

Python之面向物件

面向物件:

~Python是一門面向物件的語言。類(class)是一種抽象的模板,例項(instance)是根據類建立的具體物件,每個物件都有相同的方法,只不過傳入的資料可能不一樣。

~類裡面一般包含屬性和方法,你可以簡單的理解為屬性為靜態的,方法為動態的。比如class person:這個類手、腳、眼睛這些為屬性,而走路、看書等為方法。

~由於類可以起到模板的作用,因此,可以在建立例項的時候,把一些我們認為必須繫結的屬性強制填寫進去。通過定義一個特殊的__init__方法,在建立例項的時候,就把各~種屬性綁上去

~而__init__方法的第一個引數永遠是self,表示建立的例項本身,因此,在__init__

方法內部,就可以把各種屬性繫結到self,因為self就指向建立的例項本身。

•建立

建立一個person的類:

1 class person:
2     def __init__(self,name,weight,hight,country):
3         self.name=name
4         self.weight=weight
5         self.hight=hight
6         self.country=country

傳入一個例項

1 a=person("y",179,180,"china")
1 a.country#獲取person中country這個屬性
china


建立一個預設屬性
1 class person:
2     country="china"#shared by all instance
3     def __init__(self,name,weight,hight):
4         self.name=name
5         self.weight=weight
6         self.hight=hight
1 a=person("y",179,180)
1 a.country
'china'

亦或寫成

1 class person:
2     def __init__(self,name,weight,hight):
3 self.name=name 4 self.weight=weight 5 self.hight=hight 6 self.country="china"

建立一個既有屬性又有方法的類

 1 class person:
 2     def __init__(self,name,weight,hight):
 3         self.name=name
 4         self.weight=weight
 5         self.hight=hight
 6         self.country="china"
 7     def judge_weight(self,weight):
 8         if weight>160:
 9             print("超重")
10         elif weight>120:
11             print("標準")
12         else:
13             print("偏瘦")
1 a=person("y",179,180)
1 a.judge_weight(110)
偏瘦



•繼承

一個類繼承另一個類時,它將自動獲得另一個類的屬性和方法;原有的類稱為父類,而新的類稱為子類。

1 class huge(person):
2     pass#完全繼承

1 a=huge("y",179,180)
2 a.name
'y'

多型

子類繼承了其父類的所有屬性和方法,同時也可以定義自己的屬性和方法。

用super().__init__去初始化父類super()將返回當前類繼承的父類,__init__初始化方法。

1 class huge(person):
2     def __init__(self,name,weight,hight,skill):#寫出子類的所有屬性
3         super().__init__(name,weight,hight)#子類所繼承的父類屬性
4         self.skill=skill#子類自己的屬性
5         pass
1 a=huge("y",179,180,"fly")
2 a.skill
'fly'


方法過載:當父類的方法不符合子類的需求時,可以重新定義一個方法,即它與重寫的父類方法同名,即覆蓋了父類的方法。
 1 class huge(person):
 2     def __init__(self,name,weight,hight,skill):#寫出子類的所有屬性
 3         super().__init__(name,weight,hight)#子類所繼承的父類屬性
 4         self.skill=skill#子類自己的屬性
 5     def judge_weight(self,hight):
 6         if hight>180:
 7             print("")
 8         elif hight>170:
 9             print("")
10         else:
11             print("")
12         
1 a.judge_weight(170)