@property與@xxx.setter的用法


類中@property與@xxx.setter的方法介紹。

簡單說,@property就是將定義的函數(方法)當作屬性對象使用,不需要像調用函數那樣去調用,而@xxx.setter是為@xxx的這樣函數進行值的設置,

就是可以用@xxx.setter為xxx的函數進行值的更改,在@xxx.setter聲明下的函數名字可以不用xxx相同的函數名。

# property裝飾器
# 作用: 將一個get方法轉換為對象的屬性。 就是 調用方法改為調用對象
# 使用條件: 必須和屬性名一樣

# setter方法的裝飾器:
# 作用:將一個set方法轉換為對象的屬性。 就是 a調用方法改為調用對象
# 使用方法:@屬性名.setter

class Person:
def __init__(self,name):
self._name = name
# 利用property裝飾器將獲取name方法轉換為獲取對象的屬性
@property
def name(self):
return self._name

# 利用property裝飾器將設置name方法轉換為獲取對象的屬性
@name.setter
def nam(self,name):
self._name = name
self.a=22
p = Person('小黑')
print(p.name) # 原獲取 p.neame() , 現 p.name,已經將函數(方法變成了屬性值獲取)
p.nam = '小灰' # 原設置 p.name('小灰') ,現 p.name = '小灰',相當於直接用變量命名,給屬性值來更改此變量
print(p.name)



class Person:
def __init__(self,name):
self._name = name
@property
def name(self):
a=100
return self._name,a
@name.setter
def name(self,name): # name是一個列表,包含2個元素
self._name = name[0] # 第一個元素值賦給self._name
a=name[1] # 第二個值賦給a了,可是在執行上一個name()函數時候會有a=100,因此才不會改變變量的
p = Person('小黑')
print(p.name)
p.name = [88,99] # 因為執行了a=100,所以執行a=name[1]時,也不會改變輸出值
print(p.name)

class Person:
def __init__(self,name,bb):
self._name = name
self.a = bb
# 利用property裝飾器將獲取name方法轉換為獲取對象的屬性
@property
def name(self):

return self._name,self.a
# 利用property裝飾器將設置name方法轉換為獲取對象的屬性
@name.setter
def name(self,name):
self._name = name[0]
self.a=name[1]
p = Person('小黑',100)
print(p.name) # 原獲取 p.name() , 現 p.name,已經將函數(方法變成了屬性值獲取)
p.name = [88,'小慧'] # 多個@property的屬性輸出
print(p.name)

 

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM