高渐飞 发表于 2018-7-18 20:53:36

A-21-描述符

#coding=UTF-8

#知识点
"""
1.描述符就是一个类,一个至少实现 __get__()、__set__() 或 __delete__() 三个特殊方法中的任意一个的类

2. 在描述符类中:
   __get__(self, instance, owner): 用于访问属性,它返回属性的值
   __set__(self, instance, value): 将在属性分配操作中调用,不返回任何内容
   __delete__(self, instance): 控制删除操作,不返回任何内容
其中, self参数为描述符类, instance参数为描述符所在类的实例对象, owner为描述符所在类
"""
class MyDes:
    def __init__(self, value = None):
      self.val = value
    def __get__(self, instance, owner):
      return self.val ** 2

class Test:
    def __init__(self):
      self.x = MyDes(3)

test = Test()
print(test.x)
#<__main__.MyDes object at 0x1058e6f60>



#访问实例层次上的描述符 x,只会返回描述符本身。为了让描述符能够正常工作,它们必须定义在类的层次上。
# 如果你不这么做,那么 Python 无法自动为你调用 __get__ 和 __set__ 方法。

#使用描述符的实例: 摄氏度转华氏度:

classCelsius:
    def__init__(self, value = 26.0):
      self.value = float(value)

    def__get__(self, instance, owner):
      returnself.value

    def__set__(self, instance, value):
      self.value = float(value)

classFahrenheit:
    def__get__(self, instance, owner):
      returninstance.cel *1.8 + 32

    def__set__(self, instance, value):
      instance.cel = ( float(value) - 32 ) / 1.8

classTemperature:
    cel = Celsius()
    fah = Fahrenheit()

temp=Temperature()
print(temp.cel)
print(temp.fah)
页: [1]
查看完整版本: A-21-描述符