這篇文章給大家分享的是有關Python中如何設置對象屬性的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設、高性價比浪卡子網(wǎng)站開發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式浪卡子網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設找我們,業(yè)務覆蓋浪卡子地區(qū)。費用合理售后完善,10余年實體公司更值得信賴。用類存儲數(shù)據(jù)
類實際上就是一個數(shù)據(jù)結構,對于python而言,它是一個類似于字典的結構。當根據(jù)類創(chuàng)建了對象之后,這個對象就有了一個數(shù)據(jù)結構,包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:存儲數(shù)據(jù)并提供數(shù)據(jù)檢索功能。
例如,下面是史上最簡單的類:
class Person: pass
pass關鍵字表示這個類沒有實際的邏輯體。這里只是定義了一個類,這個類的對象初始化時不會存放任何數(shù)據(jù)?,F(xiàn)在,構造一個對象,讓它和dict一樣存放一些數(shù)據(jù):
p = Person() # 構造對象 p.name = "longshuai" # 創(chuàng)建對象的屬性name p.age = 23 # 創(chuàng)建對象的屬性age
現(xiàn)在,Person的實例對象p中就存放了兩個屬性:p.name和p.age??梢灾苯尤z索存放在p中的數(shù)據(jù):
print(p.name) # 輸出"longshuai" print(p.age) # 輸出23
也可以使用dict來存儲這些數(shù)據(jù):
>>> d={} >>> d["name"]="longshuai" >>> d["age"]=23 >>> print(d["name"]) longshuai >>> print(d["age"]) 23
在數(shù)據(jù)存儲方面,它們的作用是完全等價的。實際上對象/類在內(nèi)部就是使用一個名為__dict__的dict類型來存放它所擁有的數(shù)據(jù)的。
>>> p.__dict__ {'name': 'longshuai', 'age': 23}
__init__()構造對象初始數(shù)據(jù)
上面的name和age屬性是在構建了對象之后附加上去的,如果想要創(chuàng)建對象時就存放好數(shù)據(jù),可以定義類的構造函數(shù)__init__()。例如:
class Person: def __init__(self,name,age): self.name = name self.age = age
然后創(chuàng)建對象的時候,傳遞name參數(shù)和age參數(shù)即可。
>>> p = Person("longshuai",23) >>> p.__dict__ {'name': 'longshuai', 'age': 23}
如果想定義這個類公有的數(shù)據(jù),可以將公有屬性定義為類的屬性。比如中國人都是黃皮膚:
class Person: skin = "yellow" def __init__(self,name,age): self.name = name self.age = age
這樣每次創(chuàng)建Person的對象實例時,每個對象都會有相同的膚色:yellow。但注意,這個skin屬性是類屬性,不是對象屬性,它是存放在類的名稱空間中的。當對象真的需要這個屬性的時候,會臨時去檢索類的名稱空間來獲取??聪旅娴腳_dict__字典即可知道:
>>> p = Person("longshuai",23) >>> p.__dict__ {'name': 'longshuai', 'age': 23} >>> p.skin 'yellow'
但注意,按照面向?qū)ο蟮姆庋b原則,在類中定義類變量屬性是不合理的,因為要在外部訪問它需要通過x.y的方式,這意味著打開了封裝好的"黑匣子",暴露了屬性。除非真的有需要,否則可以將類變量的定義放進構造函數(shù)__init__()中,這樣每個初始化的對象都會有該屬性。
setter和getter方法
在面向?qū)ο蟮慕嵌壬峡紤],一般是不建議直接在類的外部通過x.name的方式賦值、取值的。而是定義對應的方法,通過方法來取得對應的值。這兩類方法稱為setter、getter方法:setter用于賦值或設置屬性值,getter用于取得屬性值。
class Person: skin = "yellow" def __init__(self,name,age): self.name = name self.age = age def set(self,job): self.job = job return self def get(self): return self.name,self.age,self.job
上面的set方法用于設置一個新屬性job。get用于返回對象的3個屬性。
>>> p = Person("longshuai",23) >>> p.set("manager") >>> name, age, job = p.get() >>> print([name,age,job]) ['longshuai', 23, 'manager']
需要注意,setter方法可以有多種類型的返回值,常用的有4種:
返回設置后的值
返回設置前的值
返回對象自身
返回布爾值,表示是否設置成功
這4種返回值都很常見,特別是第三種用來串聯(lián)對象方法的時候非常好用。修改上面的set方法:
class Person: skin = "yellow" def __init__(self,name,age): self.name = name self.age = age def set(self,job): self.job = job return self def get(self): return self.name,self.age,self.job
上面的set()返回self對象自身。于是串聯(lián)set()和get():
>>> p = Person("longshuai",23) >>> name,age,job = p.set("manager").get()
無論使用何種返回值方式,都不會真正影響程序的使用。但使用合理的返回值類型,可能會簡化代碼的編寫。另外,決定了返回值的方式后,就不要再去修改,因為很可能會牽一發(fā)而動全身。
上面的getter返回了多個值,但一般來說getter只返回一個對應的屬性。比如getname()返回name屬性,getage()返回age屬性等。這樣需要定義多個getter方法。
def get_name(self): return self.name def get_age(self): return self.age def get_job(self): return self.job
合并setter和getter
很多時候可以合并setter和getter方法。合并的方式是判斷方法的參數(shù),如果調(diào)用方法的時候給了參數(shù),就表示setter,沒有給定參數(shù),就表示是getter。
例如,對于job屬性:
def set_get_job(self, job=None): if job: self.job = job else: return self.job
現(xiàn)在可以以給參數(shù)和不給參數(shù)兩種不同的方式來調(diào)用set_get_job()方法:
p = Person("longshuai", 23) p.set_get_job("manager") # 給了參數(shù),說明是setter job = p.set_get_job() # 沒給參數(shù),說明是getter
感謝各位的閱讀!關于“Python中如何設置對象屬性”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。