描述符
描述符就是将某种特殊类型的类的实例,指派给另一个类的属性。
特殊类型:
__get_(self, instance, owner)
用于访问属性,返回属性的值
__set_(self, instance, value)
将在属性分配操作中调用,不会返回任何内容
__del__(self, instance)
控制删除操作,不返回任何内容
各个属性内容,调用方法如下:
class MyDecriptor():
def __get__(self, instance, value):
print("get:", self, instance, value)
def __set__(self, instance, value):
print("set:", self, instance, value)
def __delete__(self, instance):
print("delete:", self, instance)
class Test():
x = MyDecriptor()
t1 = Test()
t1.x
t1.x = "sd"
del t1.x
get: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88> <class '__main__.Test'>
set: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88> sd
delete: <__main__.MyDecriptor object at 0x000001BBF699D2C8> <__main__.Test object at 0x000001BBF6BE1D88>
定义一个温度类,再定义两个描述符类来摄氏度和华氏度,你可以给摄氏度属性赋值,打印的华氏度属性是自动转换的结果
class Celsuis():
def __init__(self, value = 30):
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 Tempterature():
cel = Celsuis()
fah = Fahrenheit()
temp = Tempterature()
temp.cel = 40
print(temp.fah)
temp.fah = 200
print(temp.cel)
104.0
93.33333333333333