1、類的出現
面對物件程式設計是目前最有效的軟體編寫方法之一,而類的編寫與例項化則是面對物件程式設計的基本要求。與函式相同,類通常也被封裝在模組中,需要時將類匯入主程式檔案,再例項化。
2、類的組成
類通常包含兩個部分——屬性和方法(類中的函式統稱為方法,因此方法本質上就是函式,只不過在形參上有特殊的規定)。我們根據乙個例子來學習一下簡單的類:
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
defget_age
(self)
:print
("the pet's age is "
+str
(self.age)
+"."
)
方法__init__()是乙個特殊的方法,因為在類進行例項化時,這個方法是自動執行的(init兩邊各有兩個下劃線),我們可以將它看成乙個構造器,完成初始化的功能(初始化類的屬性),在定義形參時,必須包含self,而且必須位於其他形參之前。
但是當我們例項化時,實參self將被自動傳入(它讓例項可以訪問類中的屬性和方法)。
以self為字首的變數就是類的屬性,類中所有的方法都可以使用。
在類中定義方法必須有形參self,不然會報錯。
3、類的例項化
類是乙個冷冰冰的空殼子,只有被例項化的類——物件才具備生命,我們來看例子:
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
defget_age
(self)
:print
("the pet's age is "
+str
(self.age)
+"."
)pet_0 = pet(
'mike',1
)# 類的例項化,規則請自行體會(傳入的實參與__init__()有關)
pet_1 = pet(
'marry',2
)print
(pet_0.name)
print
(pet_0.age)
pet_1.get_name(
)pet_1.get_age(
)
執行結果為:
mike
1the pet's name is marry.
the pet's age is
2.
無論是訪問類中的變數還是呼叫類中的方法,一般都採用句點表示法。並且我們可以根據需要建立任意數量的例項。
4、屬性的預設值
注意,類中的每個屬性都必須初始化。我們有時候可以在類中給屬性設定乙個預設值,這樣的話在定義__init__()方法時也就不需要為該屬性設定形參。
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
self.master =
'tom'
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
defget_age
(self)
:print
("the pet's age is "
+str
(self.age)
+"."
)def
get_master
(self)
:print
("the pet's master is "
+ self.master +
".")
pet_0 = pet(
'mike',1
)pet_0.get_master(
)
執行結果為:
the pet's master is tom.
在上面這個例子中,屬性master的預設值就是 『tom』(必須在__init__()函式體內完成所有屬性的初始化) ,因此我們在例項化的時候不需要為它傳參。
5、修改屬性的值
通常情況下,我們有兩種方式可以修改屬性的值。
a 直接通過例項
直接通過例項訪問,然後進行值的修改,看例子:
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
self.master =
'tom'
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
defget_age
(self)
:print
("the pet's age is "
+str
(self.age)
+"."
)def
get_master
(self)
:print
("the pet's master is "
+ self.master +
".")
pet_0 = pet(
'mike',1
)pet_0.get_master(
)pet_0.master =
'marry'
pet_0.get_master(
)
執行結果為:
the pet's master is tom.
the pet's master is marry.
b 通過方法修改
我們可以在類中定義乙個專門用於更新屬性的方法,我個人更建議這種方式,因為我們可以通過完善方法的定義規避一些錯誤(比如設定條件句防止修改後的值不合理)。
class
pet():
# 類名的命名規則遵循駝峰命名法,一般不採用下劃線,並且要注意大小寫
def__init__
(self, name, age)
: self.name = name
self.age = age
self.master =
'tom'
defget_name
(self)
:print
("the pet's name is "
+ self.name +
".")
defget_age
(self)
:print
("the pet's age is "
+str
(self.age)
+"."
)def
get_master
(self)
:print
("the pet's master is "
+ self.master +
".")
defupdate_master
(self, master)
: self.master = master
pet_0 = pet(
'mike',1
)pet_0.get_master(
)pet_0.update_master(
'marry'
)pet_0.get_master(
)
執行結果為:
the pet's master is tom.
the pet's master is marry.
Python學習筆記(十二)
1.語法錯誤和異常錯誤 while true print hello python error message file c programming eclipse project pythonstudy exception.py line 9 while true print hello pyth...
Python學習筆記(十二) Python模組
一 python模組 python 模組 module 是乙個 python 檔案,以 py 結尾,包含了 python 物件定義和python語句。模組讓你能夠有邏輯地組織你的 python 段,把相關的 分配到乙個模組裡能讓你的 更好用,更易懂。模組能定義函式,類和變數,模組裡也能包含可執行的 ...
python學習筆記十二(字典)
字典 1.概述 使用鍵 值 key value 儲存,具有極快的查詢速度 乙個字典裡可以儲存多個鍵 值對 注意 字典是無序的 key的特性 1 字典中的key必須唯一 2 key必須是不可變的物件 3 字串 整數等都是不可變的,可以作為key 4 list是可變的,不能作為key 例 儲存多個學生的...