通常情况下,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副本,并且还有另一个名为Quote的列具有相同的性质。
SQLAlchemy可以实现吗?或者一般来说,在Python中甚至可以使用Mixin?感谢。
答案 0 :(得分:1)
我建议使用python decorator。
以下是如何使用plan python类获取此代码的示例:
c:\git\yoursite> git push https://yourlogin@yoursite.scm.azurewebsites.net:443/yoursite.git
输出:
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)
您必须根据sqlalchemy进行调整,例如将>>> String here, can be SQLAlchemy column object
与setattr
相关联。