zoukankan      html  css  js  c++  java
  • Magic Methods 5

    描述符 : 将某种特殊类型的类的实例指派给另一个类的属性。

    特殊类型为以下方法的1-3个 :

    • __get__(self, instance, owner):
      用于访问属性,它返回属性的值
    • __set__(self, instance, value):
      将在属性分配操作中调用,不返回任何内容
    • __delete__(self, instance):
      控制删除操作,不返回任何内容

    An example : design a property

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    >>> class MyProperty:
    def __init__(self, fget=None, fset=None, fdel=None):
    self.fget = fget
    self.fset = fset
    self.fdel = fdel
    def __get__(self, instance, owner):
    return self.fget(instance)
    def __set__(self, instance, value):
    self.fset(instance, value)
    def __delete__(self, instance):
    self.fdel(instance)


    >>> class C:
    def __init__(self):
    self._x = None
    def getX(self):
    return self._x
    def setX(self, value):
    self._x = value
    def delX(self):
    del self._x
    x = MyProperty(getX, setX, delX)


    >>> c = C()
    >>> c.x = 'X'
    >>> c.x
    'X'
    >>> del c.x

    大专栏  Magic Methods 5"定义一个温度类,再定义两个描述符类用于描述摄氏度和华氏度两个属性。要求属性可以自动进行转换。(°F = 1.8 * °C + 32)">定义一个温度类,再定义两个描述符类用于描述摄氏度和华氏度两个属性。要求属性可以自动进行转换。(°F = 1.8 * °C + 32)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    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.0
    def __set__(self, instance, value):
    instance.cel = (float(value) - 32.0) / 1.8

    class Temperature:
    # 定义cel属性的Celsius类
    cel = Celsius()
    # 定义fah属性的Fahrenheit类
    fah = Fahrenheit()

    Result:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> temp = Temperature()
    >>> temp
    <__main__.Temperature object at 0x105815438>
    >>> temp.cel
    26.0
    >>> temp.cel = 40
    >>> temp.cel
    40.0
    >>> temp.fah
    104.0
    >>> temp.fah = 100
    >>> temp.cel
    37.77777777777778
  • 相关阅读:
    numpy-自定义ufunc函数和广播
    numpy-ufunc函数
    numpy数组(五)
    numpy数组(四)
    numpy数组(三)
    numpy数组(二)
    素数序列的生成及其应用(采用了新学的更高效的算法:布尔标记法 + 倍数淘汰法)
    demo04-js变量
    demo03-js注释
    demo02-js引入外链
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12286208.html
Copyright © 2011-2022 走看看