中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

python類屬性的詳細解析

發布時間:2020-07-17 10:42:09 來源:億速云 閱讀:154 作者:小豬 欄目:開發技術

這篇文章主要講解了python類屬性的詳細解析,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

首先我們來看一下屬性的定義

屬性的定義:python中的屬性其實是普通方法的衍生。

操作類屬性有三種方法:

1.使用@property裝飾器操作類屬性。

2.使用類或實例直接操作類屬性(例如:obj.name,obj.age=18,del obj.age)

3.使用python內置函數操作屬性。

屬性存在的意義:

1、訪問屬性時可以制造出和訪問字段完全相同的假象,屬性由方法衍生而來,如果Python中沒有屬性,方法完全可以代替其功能。

2、定義屬性可以動態獲取某個屬性值,屬性值由屬性對應的方式實現,應用更靈活。

3、可以制定自己的屬性規則,用于防止他人隨意修改屬性值。

下面詳細介紹三種操作類屬性的方法:

1.使用@property裝飾器操作類屬性。

定義時,在普通方法的基礎上添加@property裝飾器;屬性僅有一個self參數,調用時無需括號;

優點:

1) @property裝飾器可以實現其他語言所擁有的getter,setter和deleter的功能(例如實現獲取,設置,刪除隱藏的屬性)

2) 通過@property裝飾器可以對屬性的取值和賦值加以控制,提高代碼的穩定性。

實例代碼1:

#encoding=utf-8 
class Goods(): #新式類
 @property
 def price(self): #查看屬性值 
 print ('@property ') 
 @price.setter #修改、設置屬性 
 def price(self, value): 
 print ('@price.setter' ) 
 @price.deleter#刪除屬性
 def price(self): 
 print ('@price.deleter') 
 
obj = Goods(50) 
obj.price# 自動執行 @property 修飾的 price 方法,并獲取方法的返回值 
obj.price = 2000 # 自動執行 @price.setter 修飾的 price 方法,并將2000賦值給方法的參數
del obj.price # 自動執行 @price.deleter 修飾的 price 方法 
結果輸出:
@property
@price.setter
@price.deleter

實例代碼2:通過@property裝飾器對屬性的取值和賦值加以控制

class Goods(object):
  def __init__(self):
    self.value=50
  @property
  def price(self): # 查看屬性
    return self.value
 
  @price.setter # 添加或設置屬性(屬性名.setter)
  def price(self, value):
    if value >=50 and value<=100: #對屬性的取值和賦值加以控制
      self.value=value
      print (self.value)
    else:
      print ("請輸入一個50到100之間的數!")
 
  @price.deleter # 刪除屬性(屬性名.deleter) 注意:屬性一旦刪除,就無法設置和獲取
  def price(self):
    del self.value
    print ("price is deleted!")
 
obj = Goods()
print (obj.price)  # 自動執行 @property 修飾的 price 方法,并獲取方法的返回值
obj.price=106   # 自動執行 @price.setter 修飾的 price 方法,并將106 賦值給方法
del obj.price   # 自動執行 @price.deleter 修飾的 price 方法
結果輸出:
50
請輸入一個50到100之間的數!
price is deleted!

實例擴展:

class Dog(object): 
 
 name = 'dog' 
 
 def init(self): 
 
  self.age = 18
 
d1 = Dog()

d2 = Dog()

這里有兩個實例 d1,d2 吧。

d1.name # 輸出 dogd2.name # 輸出 dogd1.name = 'abc'
d1.name # 輸出 abcd2.name # 輸出 dogDog.name # 輸出 dog

原因是 d1.name 輸出 dog 不是因為這個實例共享了類屬性,而是因為這個實例沒有 dog 屬性,所以 python 查找了類屬性。但是一旦你修改了 d1.name 相當于給 d1 實例綁定了 name 屬性之后,d1.name 就與類屬性無關了。既然這樣就談不上實例之間共享類屬性了,因為只要一賦值,就相當于綁定了屬性,則上述 d1.name 的含義和 d2.name 的含義就不同了,它們的值也不同,很明顯它們的數據沒有共享。

看完上述內容,是不是對python類屬性的詳細解析有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

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

AI

曲麻莱县| 天等县| 乌苏市| 平顶山市| 宜宾市| 双江| 太白县| 鄱阳县| 鹿邑县| 建始县| 山西省| 黄大仙区| 安顺市| 天长市| 河北区| 资兴市| 乌拉特前旗| 宜宾县| 高碑店市| 盐边县| 南涧| 定南县| 赫章县| 木里| 九台市| 嘉鱼县| 罗甸县| 红桥区| 沙湾县| 雅江县| 炉霍县| 合山市| 临邑县| 赞皇县| 阳高县| 博湖县| 贡嘎县| 石台县| 综艺| 万州区| 常熟市|