91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何設置對象屬性

發布時間:2021-07-30 13:45:16 來源:億速云 閱讀:502 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python中如何設置對象屬性的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

用類存儲數據

類實際上就是一個數據結構,對于python而言,它是一個類似于字典的結構。當根據類創建了對象之后,這個對象就有了一個數據結構,包含一些賦值了的屬性。在這一點上,它和其它語言的struct的作用是類似的:存儲數據并提供數據檢索功能

例如,下面是史上最簡單的類:

class Person: pass

pass關鍵字表示這個類沒有實際的邏輯體。這里只是定義了一個類,這個類的對象初始化時不會存放任何數據。現在,構造一個對象,讓它和dict一樣存放一些數據:

p = Person() # 構造對象
p.name = "longshuai" # 創建對象的屬性name
p.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'

但注意,按照面向對象的封裝原則,在類中定義類變量屬性是不合理的,因為要在外部訪問它需要通過x.y的方式,這意味著打開了封裝好的"黑匣子",暴露了屬性。除非真的有需要,否則可以將類變量的定義放進構造函數__init__()中,這樣每個初始化的對象都會有該屬性。

setter和getter方法

在面向對象的角度上考慮,一般是不建議直接在類的外部通過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種返回值都很常見,特別是第三種用來串聯對象方法的時候非常好用。修改上面的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對象自身。于是串聯set()和get():

>>> p = Person("longshuai",23)
>>> name,age,job = p.set("manager").get()

無論使用何種返回值方式,都不會真正影響程序的使用。但使用合理的返回值類型,可能會簡化代碼的編寫。另外,決定了返回值的方式后,就不要再去修改,因為很可能會牽一發而動全身。

上面的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方法。合并的方式是判斷方法的參數,如果調用方法的時候給了參數,就表示setter,沒有給定參數,就表示是getter。

例如,對于job屬性:

def set_get_job(self, job=None):
 if job:
  self.job = job
 else:
  return self.job

現在可以以給參數和不給參數兩種不同的方式來調用set_get_job()方法:

p = Person("longshuai", 23)
p.set_get_job("manager")  # 給了參數,說明是setter
job = p.set_get_job()  # 沒給參數,說明是getter

感謝各位的閱讀!關于“Python中如何設置對象屬性”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

靖边县| 金平| 西和县| 收藏| 怀化市| 平果县| 莱芜市| 江西省| 南郑县| 崇信县| 蕉岭县| 农安县| 萨嘎县| 卢氏县| 灯塔市| 蒲城县| 长葛市| 雅江县| 登封市| 大英县| 太仆寺旗| 阳朔县| 韩城市| 运城市| 莲花县| 厦门市| 舞钢市| 五大连池市| 鸡东县| 交口县| 兰坪| 祥云县| 通城县| 泰顺县| 广灵县| 泾源县| 田阳县| 肥西县| 华宁县| 合水县| 临邑县|