我有两个类: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 做了一些类似的事情。您将属性定义为向您返回类型化值的列实例。
最佳答案
这是 descriptor. 的完美用例基本上定义__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
关于python - 如何将实例表示为类型值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757796/