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的別稱

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