我想做的是声明类变量,但实际上将它们用作实例的变量。我有一个 classField
和一个 class Thing
,像这样:
class Field(object):
def __set__(self, instance, value):
for key, v in vars(instance.__class__).items():
if v is self:
instance.__dict__.update({key: value})
def __get__(self, instance, owner):
for key, v in vars(instance.__class__).items():
if v is self:
try:
return instance.__dict__[key]
except:
return None
class Thing(object):
foo = Field()
因此,当我实例化一个事物并设置属性foo时,它将被添加到实例中,而不是类中,类变量实际上永远不会被重新设置。
new = Thing()
new.foo = 'bar'
# (foo : 'bar') is stored in new.__dict__
到目前为止,这是可行的,但是上面的 Field 代码相当尴尬。它也需要在类 props 中查找 Field 对象实例,否则似乎无法知道 and 中的属性 ( )foo
的名称。是否有另一种更直接的方法来实现这一目标?__set__
__get__