有没有办法从类声明中引用类名?一个例子如下:
class Plan(SiloBase):
cost = DataField(int)
start = DataField(System.DateTime)
name = DataField(str)
items = DataCollection(int)
subPlan = ReferenceField(Plan)
Run Code Online (Sandbox Code Playgroud)
我有一个读取此信息的元类并进行一些设置,基类实现了一些常见的保存.我希望能够创建这样的递归定义,但到目前为止,在我的实验中,我无法获得我想要的效果,通常会遇到"计划未定义"错误.我理解发生了什么,类的名称不在类的范围内.
Eva*_*ark 24
试试这个:
class Plan(SiloBase):
cost = DataField(int)
start = DataField(System.DateTime)
name = DataField(str)
items = DataCollection(int)
Plan.subPlan = ReferenceField(Plan)
Run Code Online (Sandbox Code Playgroud)
或使用__new__这样:
class Plan(SiloBase):
def __new__(cls, *args, **kwargs):
cls.cost = DataField(int)
cls.start = DataField(System.DateTime)
cls.name = DataField(str)
cls.items = DataCollection(int)
cls.subPlan = ReferenceField(cls)
return object.__new__(cls, *args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
我有一个读取此信息并进行一些设置的元类
大多数使用元类的框架都提供了解决此问题的方法.例如,Django:
subplan = ForeignKey('self')
Run Code Online (Sandbox Code Playgroud)
subplan = SelfReferenceProperty()
Run Code Online (Sandbox Code Playgroud)
解决方案的问题,例如在以后使用或使用附加属性,__new__是大多数ORM元类都希望在创建类时存在类属性.
| 归档时间: |
|
| 查看次数: |
6300 次 |
| 最近记录: |