1. 程式人生 > 實用技巧 >【Python學習日記】B站小甲魚:屬性訪問

【Python學習日記】B站小甲魚:屬性訪問

屬性訪問 property

class C:
    def __init__(self, size=10):
        self.size = size

    def getSize(self):
        return self.size

    def setSize(self, value):
        self.size = value

    def delSize(self):
        del self.size

    x = property(getSize, setSize, delSize)


c = C()
c.x = 1
print
(c.size)

定義一個矩形

class Rectangle():
    def __init__(self, width=0, hight=0):
        self.width = width
        self.hight = hight

    def __setattr__(self, name, value):
        if name == 'Square':
            self.hight = value
            self.width = value
        else:
            super().__setattr__
(name, value) def getArea(self): return self.width * self.hight r1 = Rectangle(3,6) print(r1.getArea()) r1.Square =10 print(r1.getArea())

如果不使用super()訪問基類的方法,就會陷入死迴圈


描述符:將某種特殊型別的類的例項指派給另一個類的屬性

練習:要求定義一個溫度類,然後定義兩個描述符類用於描述攝氏度和華氏度兩個屬性。要求兩個屬性會自動進行轉換。

class Celsius:
    def __init__(self, value=26.0):
        self.value 
= float(value) def __get__(self, instance, owner): return self.value def __set__(self, instance, value): self.value = float(value) class Fahrenheit: def __get__(self, instance, owner): return instance.cel*1.8+32 def __set__(self, instance, value): instance.cel = (float(value)-32)/1.8 class Temperature: cel = Celsius() fah = Fahrenheit() temp = Temperature() temp.cel = 30 print(temp.fah) print('*') temp.fah = 100 print(temp.cel)

輸出結果是

86.0
*
37.77777777777778

能夠實現華氏溫度和攝氏溫度的互相轉換