python – 如何在实例化时有条件地将mixin添加到当前类?

python – 如何在实例化时有条件地将mixin添加到当前类?,第1张

概述我想要一个基于传递给构造函数的参数添加mixins的类.这就是我尝试过的: class MixinOne(object): def print_name(self): print("{} is using MixinOne.".format(self.name))class MixinTwo(object): def print_name(self): 我想要一个基于传递给构造函数的参数添加mixins的类.这就是我尝试过的:

class MixinOne(object):    def print_name(self):        print("{} is using MixinOne.".format(self.name))class MixinTwo(object):    def print_name(self):        print("{} is using MixinTwo.".format(self.name))class Sub(object):    def __new__(cls,*args,**kwargs):        mixin = args[1]        if mixin == 'one':            bases = (MixinOne,) + cls.__bases__        elif mixin == 'two':            bases = (MixinTwo,) + cls.__bases__        return object.__new__(type('Sub',bases,dict(cls.__dict__)))    def __init__(self,name,mixin):        print('In Sub.__init__')        self.name = name

唯一的问题似乎是__init__没有被调用,所以print_name方法不起作用.

>如何让Sub上的__init__开火?

要么

>有更好的方法吗?

解决方法 > __init__仅在__new__返回类的实例时被调用.你的on-the-fly类继承自mixin和Sub的父级,但不是来自Sub本身.如果设置bases =(MixinOne,cls),它可能会起作用. >编写工厂函数(或classmethod),而不是重载Sub的构造.更好的是,只需创建一些子类,而不是在运行时创建类. 总结

以上是内存溢出为你收集整理的python – 如何在实例化时有条件地将mixin添加到当前类?全部内容,希望文章能够帮你解决python – 如何在实例化时有条件地将mixin添加到当前类?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193286.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存