一個需要對象其他屬性求出來的屬性。
解釋一下 比如bmi是人的一個屬性,和身高、體重都是一樣的性質,但是組要身高和體重進行求職。
class People:
def __init__(self,name,weight,height):
self.name = name
self.weight = weight
self.height = height
def bmi(self):
return self.weight/(self.height**2)
p = People('alex',75,1.81)
在上個栗子中,想要取得bmi只能寫成: p.bmi() 。 但是我們想要把bmi作爲一個屬性
讓用戶感覺不到我們使用bmi() 而是把bmi作爲一個屬性。
因此,bmi看起來雖然像一個屬性,但是沒有屬性所具有的功能,不可以賦值。
class People:
def __init__(self,name):
self.__name = name
def get_name(self):
return self.__name
@property
def name(self):
return self.__name
p= People("egon")
print(p.get_name())
print(p.name)
我們想取的是名字,所以最好的體驗應該是p.name。使用property就可以實現。想實現類似賦值的功能,也可以寫一個接口
@property
def name(self):
return self.__name
@name.setter
def name(self,value):
if not isinstance(self,value):
print('名字必須是字符串類型')
return
self.__name=value
@name.deleter
def name(self):
print("NO")
因爲已經用@property裝飾過name,因此可以用這個進行擴展,可以將name看多property的別稱