加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:40:19 所属栏目:Python 来源:网络整理
导读:我想要一个基于传递给构造函数的参数添加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.".f
我想要一个基于传递给构造函数的参数添加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的构造.更好的是,只需创建一些子类,而不是在运行时创建类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读