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

助剂

我想有一个基于传递给构造函数的参数添加mixin的类。这是我尝试过的:

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方法将不起作用。

  1. 我怎么__init__Sub火?

要么

  1. 有一个更好的方法吗?
伊芙
  1. __init__仅在__new__返回类的实例时调用您的即时课程是从mixin和Sub级继承,而不是从Sub自身继承的如果您设置,它可能会起作用bases = (MixinOne, cls)

  2. 编写工厂函数(或类方法),而不是重载Sub的构造。更好的是,仅创建一些子类而不是在运行时创建类。:)

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

定义列表时有条件地将项目添加到列表?

如何有条件地将元素添加到R中的字符开头?

有条件地将类添加到父类

使用Polymer将CSS类有条件地添加到元素

有条件地将多个类添加到元素

有条件地通过jQuery将类添加到图像

jQuery:无法有条件地将类添加到子元素

如何有条件地将新的XElement添加到wpf中的现有根元素中?

在悬停时有条件地添加伪类

如何在React中有条件地将子组件添加到父组件?

如何有条件地将“按钮”添加到“工具栏”“表单”“组件”?

如何有条件地将元素添加到 std::array - C++11

R - 如何有条件地将连续列添加到数据框?

如何有条件地将小部件添加到列表?

如何有条件地将元素添加到jsonb数组?

如何有条件地将项目添加到 Firestore?

如何在函数调用中将键/值对有条件地添加到字典中?

有条件地将12小时添加到列中

有条件地将列添加到 dplyr R 中的 groupby

有条件地将JSF组件添加到翻译字符串中

Scala:将项目添加到序列中或有条件地合并序列

根据函数变量的值有条件地将层添加到gglplot中

有条件地将键/值对添加到Woocommerce中的数组

有条件地将命名元素添加到列表中

将信息添加到有条件地比较字符串的列中

有条件地将where子句添加到雄辩的查询中

有条件地将列添加到数据框列表中

如何有条件地将尾随导航栏项添加到将在 NavigationView 中显示的 SwiftUI 视图?

如何有条件地将一组道具添加到反应组件中?