【问题标题】:How do I concatenate many objects into one object using inheritance in python? (during runtime)python - 如何使用python中的继承将多个对象连接成一个对象? (运行时)
【发布时间】:2013-12-23 21:59:48
【问题描述】:

我有以下课程:

class hello(object):
    def __init__(self):
        pass

class bye(object):
    def __init__(self):
        pass

l = [hello, bye]

如果我执行以下操作,我会收到错误:

>>> class bigclass(*l):
  File "<stdin>", line 1
    class bigclass(*l):
                    ^
SyntaxError: invalid syntax

还有其他方法可以在运行时自动执行此操作吗?

我正在使用 Python 2.7。

【问题讨论】:

  • 不知道你遇到了什么问题,我从没想过在运行时用可变超类构造类。
  • 我正在尝试通过类似文本的界面为这些模型定义数据模型和控制器,用户在该界面中在运行时将选定的模型集连接到选定的控制器。

标签: python oop python-2.7 superclass


【解决方案1】:

您可以使用3-argument form of type 创建类:

bigclass = type('bigclass', (hello, bye), {})

【讨论】:

    【解决方案2】:

    使用元类:

    class Meta(type):
    
        def __new__(cls, clsname, bases, dct):
            bases = tuple(dct.pop('bases'))
            return type.__new__(cls, clsname, bases, dct)
    
    class bigclass:
    
        __metaclass__ = Meta
        bases = l
    
    print bigclass.__bases__
    #(<class '__main__.hello'>, <class '__main__.bye'>)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-30
      • 2015-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多