Ubuntu 微软 mysql 程序员 wordpress 云计算 Windows Firefox apache centos 编程 java 开源 google linux Python shell php Android nginx

Python的神奇方法指南:构建描述符对象

描述符可以改变其他对象,也可以是访问类中任一的 getting,setting,deleting。 描述符不意味着孤立;相反,它们意味着会被它们的所有者类控制。 当建立面向对象数据库或那些拥有相互依赖的属性的类时,描述符是有用的。 当描述符在几个不同单元或描述计算属性时显得更为有用。

作为一个描述符,一个类必须至少实现 __get__,__set__,和 __delete__中的一个。 让我们快点看一下这些神奇方法吧:

__get__(self, instance, owner)

当描述符的值被取回时定义其行为。instance 是 owner 对象的一个实例,owner 是所有类。

__set__(self, instance, value)

当描述符的值被改变时定义其行为。instance 是 owner 对象的一个实例,value 是设置的描述符的值

__delete__(self, instance)

当描述符的值被删除时定义其行为。instance 是 owner 对象的一个实例。

现在,有一个有用的描述符应用例子:单位转换策略

class Meter(object):
    '''米描述符'''

    def __init__(self, value=0.0):
        self.value = float(value)
    def __get__(self, instance, owner):
        return self.value
    def __set__(self, instance, value):
        self.value = float(value)

class Foot(object):
    '''英尺描述符'''

    def __get__(self, instance, owner):
        return instance.meter * 3.2808
    def __set__(self, instance, value):
        instance.meter = float(value) / 3.2808

class Distance(object):
    '''表示距离的类,控制2个描述符:feet和meters'''
    meter = Meter()
    foot = Foot()

延伸阅读

评论