草庐IT

python - 如何正确地向 Mixin 类添加类型提示?

考虑以下示例。这个例子是人为设计的,但在一个可运行的例子中说明了这一点:classMultiplicatorMixin:defmultiply(self,m:int)->int:returnself.value*mclassAdditionMixin:defadd(self,b:int)->int:returnself.value+bclassMyClass(MultiplicatorMixin,AdditionMixin):def__init__(self,value:int)->None:self.value=valueinstance=MyClass(10)print(insta

python - Python django 中的抽象类和 Mixins 有什么区别

任何人都可以告诉Django中抽象类和Mixin之间的区别是什么。我的意思是,如果我们要从基类继承一些方法,那么如果它只是一个类,为什么会有单独的术语,例如mixins。基类和混合类的区别 最佳答案 在Python(和Django)中,mixin是一种多重继承。我倾向于想起他们作为“专家”类,将特定功能添加到类中继承它(连同其他类)。他们并不是真的要站在上面他们自己的。Django的SingleObjectMixin示例,#views.pyfromdjango.httpimportHttpResponseForbidden,Http

python - 在 Python 中,mixin 是否等同于组合?如果是这样,那为什么不直接使用组合呢?

我理解mixin看起来像继承,但更像组合。(编辑:我倾向于认为通过mixin提供额外的功能/属性,而不是提供另一个is-a关系。)在心理上,当我使用mixin时,我是在说这样的话:我给你的是你所缺少的mixin,而不是你实际上也是这种mixin类型。(is-a)我读过几次,你应该更喜欢组合而不是继承。我们可以直接使用合成而不是混合,混合是做什么用的?如果我不得不猜测,那是因为my_instance.foo()比my_instance.another_instance.foo()更容易?(如果mixin有foo()可以使用my_instance.foo(),当你复合another_ins

python - 将 __table_args__ 与 SQLAlchemy 中的 mixin 类的约束相结合

在SQLAlchemy中,我已经阅读了如何在声明声明时组合来自不同mixin的__table_args__。CombiningTable/MapperArgumentsfromMultipleMixins我的问题是,该示例显示了这是如何在链的末端(MRO中的最后一类)完成的,但是如果我有这些Mixin并希望它发生在MyClientMixin或Base类以避免为其他类型的mixin复制此代码?classLaneCarrierCommitmentSummaryMixin(object):"""LaneCarrierCommitmentSummary.AbaseclassforLCCStom

python - SQLAlchemy:声明性 Mixin 类中的 getter/setter

我正在尝试为我打算在我的数据库模式中使用的混合类定义简单的getter/setter方法:fromsqlalchemyimportColumn,Integer,create_enginefromsqlalchemy.ormimportsynonym,scoped_session,sessionmakerfromsqlalchemy.ext.declarativeimportdeclarative_base,declared_attrengine=create_engine('sqlite:///')Base=declarative_base(bind=engine)Session=sc

python - 让 PyC​​harm 知道哪些类是 mixin 的

我们的应用程序有一组复杂的表单向导。为了避免代码重复,我创建了几个mixins。问题是PyCharm突出显示了带有Unresolvedattributereference错误的mixin方法。这是正确的,因为object没有这样的方法。但我知道这个mixin只会用于特殊类。有什么办法可以将此信息告知PyCharm?目前我使用这样的方法:classMyMixin(object):defget_context_data(self,**kwargs):assertisinstance(self,(ClassToBeExtended,MyMixin))#super.get_context_da

python - 如何在不出现 MRO 错误的情况下动态添加 mixin 作为基类?

假设我有一个类A,B和C.类A和B都是ClassC的混合类.classA(object):passclassB(object):passclassC(object,A,B):pass这在实例化C类时不起作用。我将不得不删除object来自C类使其工作。(否则你会遇到MRO问题)。TypeError:ErrorwhencallingthemetaclassbasesCannotcreateaconsistentmethodresolutionorder(MRO)forbasesB,object,A但是,我的情况有点复杂。在我的案例中类C是一个服务器,其中A和B将是在启动时加载的插件。它们

python - 如何在 Python 的 mixin 中调用封闭类的 super?

我在Django中有以下代码:classParent(models.Model):defsave(self):#DoStuffAclassMixin(object):defsave(self):#DoStuffBclassA(Parent,Mixin):defsave(self):super(A,self).save()#DostuffC现在,我想使用mixin,而不用在Parent中公开保存的行为。所以当我保存时,我想做C、B和A。我读过Callingthesetterofasuperclassinamixin但是我不明白,并且阅读了super文档后它似乎没有回答我的问题。问题是,我

python打字模块: Mixin

typing下是否有任何类的行为类似于mixin?例如fromtypingimportUnionclassA:passclassB:passclassC:passclassD(A,B,C):pass#current:abisAorB,butnotbothdeff(ab:Union[A,B]):pass#ideal:abisAandBdeff(ab:Mixin[A,B]):passf(D())请注意D是A和B的实例,也是C的实例。这对f来说限制太多(因为f不需要C),因此,参数ab不一定是D类型,而是Mixin[A,B]如果typing模块不提供任何选项,还有什么比创建我自己的class

Python:使用装饰器 v/s mixins?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭7年前。Improvethisquestion我已经了解装饰器和混入的基础知识。装饰器在不改变同一类的其他对象实例的情况下向对象添加新功能,而混合是一种多重继承,用于从多个父类继承。这是否意味着当您只需要修改单个对象实例时应该使用装饰器,而当您需要一个全新的对象类时应该使用混合?或者,还有什么我可能会遗漏的吗?两者在现实生活中的用例有哪些?