【Python學習日記】B站小甲魚:屬性訪問
阿新 • • 發佈:2020-09-13
屬性訪問 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
能夠實現華氏溫度和攝氏溫度的互相轉換