python入门——P46魔法方法:描述符(Property的原理)

描述符

描述符就是将某种特殊类型的类的实例,指派给另一个类的属性。
特殊类型:
__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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值