如何将实例表示为类型化值



我有两个类,一个Container类和一个Field类。 我想将Field类表示为它包含的值。 它需要键入,以便我可以用它执行一些有意义的操作。

import datetime
class Field(object):
    date = datetime.date.today()
    def __repr__(self):
        return self.date
class Container(object):
    value = Field().date
    value_2 = Field()
c = Container()
print c.value.isoformat() # perfect
print c.value_2.isoformat() # boo fails

我知道SQLAlchemy做了一些类似的事情。 将属性定义为返回类型化值的列实例。

这是描述符的完美用例。基本上__get__类上定义Field方法并从中返回预期值。您还可以根据需要定义__set__,例如不允许他们设置其他类型的值。

import datetime

class Field(object):
    def __init__(self):
        self.val = datetime.date.today()
    def __get__(self, instance=None, type=None):
        if instance is not None:
            return self.val
        return self

class Container(object):
    value_1 = Field()
    value_2 = Field()
c = Container()
print c.value_1.isoformat() # 2016-03-03
print c.value_2.isoformat() # 2016-03-03

最新更新