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
,或类似的名称。