前言
前面我們已經介紹了 python面向對象入門教程之從代碼復用開始(一) ,這篇文章主要介紹的是關于Python面向對象之設置對象屬性的相關內容,下面話不多說了,來一起看看詳細的介紹吧
用類存儲數據
類實際上就是一個數據結構,對于python而言,它是一個類似于字典的結構。當根據類創建了對象之后,這個對象就有了一個數據結構,包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:存儲數據并提供數據檢索功能。
例如,下面是史上最簡單的類:
class Person: pass
pass關鍵字表示這個類沒有實際的邏輯體。這里只是定義了一個類,這個類的對象初始化時不會存放任何數據。現在,構造一個對象,讓它和dict一樣存放一些數據:
p = Person() # 構造對象p.name = "longshuai" # 創建對象的屬性namep.age = 23 # 創建對象的屬性age
現在,Person的實例對象p中就存放了兩個屬性:p.name和p.age。可以直接去檢索存放在p中的數據:
print(p.name) # 輸出"longshuai"print(p.age) # 輸出23
也可以使用dict來存儲這些數據:
>>> d={}>>> d["name"]="longshuai">>> d["age"]=23>>> print(d["name"])longshuai>>> print(d["age"])23在數據存儲方面,它們的作用是完全等價的。實際上對象/類在內部就是使用一個名為__dict__的dict類型來存放它所擁有的數據的。
>>> p.__dict__{'name': 'longshuai', 'age': 23}__init__()構造對象初始數據
上面的name和age屬性是在構建了對象之后附加上去的,如果想要創建對象時就存放好數據,可以定義類的構造函數__init__()。例如:
class Person: def __init__(self,name,age): self.name = name self.age = age
然后創建對象的時候,傳遞name參數和age參數即可。
>>> p = Person("longshuai",23)>>> p.__dict__{'name': 'longshuai', 'age': 23}如果想定義這個類公有的數據,可以將公有屬性定義為類的屬性。比如中國人都是黃皮膚:
class Person: skin = "yellow" def __init__(self,name,age): self.name = name self.age = age
這樣每次創建Person的對象實例時,每個對象都會有相同的膚色:yellow。但注意,這個skin屬性是類屬性,不是對象屬性,它是存放在類的名稱空間中的。當對象真的需要這個屬性的時候,會臨時去檢索類的名稱空間來獲取。看下面的__dict__字典即可知道:
>>> p = Person("longshuai",23)>>> p.__dict__{'name': 'longshuai', 'age': 23}>>> p.skin'yellow'
新聞熱點
疑難解答