一个需要对象其他属性求出来的属性。
解释一下 比如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的别称