python之property属性

一个需要对象其他属性求出来的属性。

解释一下 比如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的别称

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章