有没有办法在Python的子类中多次包含相同的Mixin?

Jinghui Niu

通常,只包含一次Python mixin,例如:

class MyMixin:
    pass
class Child(Base, MyMixin):
    pass

但是,在某些情况下,如果我们可以两次使用相同的Mixin,将很方便。例如,我在SQLAlchemy中有一个Mixin,定义了一些列,如下所示:

class MyNoteMixin:
    note = Column(String)
    by_who = Column(String)

现在,我有一个继承自上述Mixin的子类,但需要两个不同的列,两者均具有注释性质。我可以做类似的事情吗?

class Child(Base, MyNoteMixin as "Description", MyNoteMixin as "Quote"):
        pass

这样,解析后的表将包含一个名为Description的列,除了名称外,该列完全是MyNoteMixin副本,并且AND还具有另一个具有相同性质的名为Quote的列。

SQLAlchemy是否可能?或一般来说,在Python中甚至可以使用Mixin吗?谢谢。

或段

我建议使用python decorator

这是一个使用plan python类的示例:

def custom_fields(**kwargs):
    def wrap(original_class):
        """
        Apply here your logic, could be anything!
        """
        for key, val in kwargs.items():
            setattr(original_class, key, val)
        return original_class
    return wrap


@custom_fields(quote='String here, can be SQLAlchemy column object')
class Child:
    pass


print(Child.quote)

输出:

>>> String here, can be SQLAlchemy column object

你将不得不去适应它SQLAlchemy的,就像连接setattr到你的MyNoteMixin

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有没有办法在Python中包含±(正负)?

有没有办法让子类根据python中的输入从不同的父类继承?

有没有办法在相同的conda环境中安装python 3和python 2?

有没有办法检查Groovy中的类或对象是否具有mixin?

Java-BubbleSort-有没有办法让我多次输入相同的输入?

有没有办法避免多次配置相同的信息?

有没有办法在python的lambda中执行“ if”

有没有办法在python中禁止舍入?

有没有办法在python中重载+ =?

有没有办法在python中清除屏幕?

有没有办法在python中输入小写?

有没有办法摆脱python列表中的“'”?

有没有办法在python中打印not bool?

有没有办法返回作为子类的类型?

有没有办法多次使用 .innerHTML?

有没有办法多次重复 nUnit TestFixture?

有没有办法让python多次重复打印输入函数,同时仍然在python中得到答案?

有没有办法在JPA中重写实体子类中的ID?

构建Python软件包时,有没有办法在源代码发布中包含文件/文件夹,但没有办法

有没有办法动态更新子类中的变量?

有没有办法在父类中获得子类的名称?

有没有办法知道超类构造函数中调用对象的子类?C ++

有没有办法在父类中获取子类文件路径?

有没有办法使用m4从包含的文件中包含行的子集?

有没有办法使用 python 脚本故意多次调用 lambda 函数?如何?

有没有办法防止Symfony 4中多次执行控制器方法?

有没有办法一次在JavaScript中多次调用函数?使用木偶

有没有办法防止表单在#c 中多次显示?

有没有办法在 Azure Devops 中多次重试时间敏感步骤?