Python 声明性mixin类中的同义词
我试图在声明性类模型的混合中使用同义词Python 声明性mixin类中的同义词,python,sqlalchemy,Python,Sqlalchemy,我试图在声明性类模型的混合中使用同义词 class MyMixin(object): __my_field = Column(Boolean, name='my_field', index=True, default=True) def __get_my_field(self): return self.__my_field @declared_attr def my_field(cls): # @NoSelf return
class MyMixin(object):
__my_field = Column(Boolean, name='my_field', index=True, default=True)
def __get_my_field(self):
return self.__my_field
@declared_attr
def my_field(cls): # @NoSelf
return synonym('__my_field', descriptor=property(cls.__get_my_field))
Base = declarative_base(cls=MyMixin)
class Model(Base):
__tablename__ = 'model'
value = Column(String)
代码启动正常,但每当我尝试查询该字段(session.query(Model.filter(Model.my_field==True)
)时,我都会得到一个最大递归错误
我尝试了建议的解决方案,但得到的只是一个超过最大递归的错误。Python适用于以双下划线开头的类属性,我强烈怀疑这是问题的根源
从列声明中删除一个下划线:
class MyMixin(object):
__my_field = Column(Boolean, name='my_field', index=True, default=True)
def _get_my_field(self):
return self._my_field
@declared_attr
def my_field(cls): # @NoSelf
return synonym('_my_field', descriptor=property(cls._get_my_field))
就这样!如果确实需要使用以双下划线开头的字段,可以将同义词名称设置为
\u MyMixin\u my\u field
,或类似的名称。