在python中以编程方式向类添加继承?

Tim*_*mmy 3 python

我可以让一个类继承Python中的"in-program"类吗?

继续我到目前为止所拥有的:

base = list(cls.__bases__)
base.insert(0, ClassToAdd )
base = tuple( base )
cls = type( cls.__name__, base, dict(cls.__dict__) )
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 8

这是一个例子,使用Greg Hewgill的建议:

class Foo(object):
    def beep(self):
        print('Hi')

class Bar(object):
    x=1  

bar=Bar()
# bar.beep()
# AttributeError: 'Bar' object has no attribute 'beep'

Bar=type('Bar',(Foo,object),Bar.__dict__.copy())
bar.__class__=Bar
bar.beep()
# Hi
Run Code Online (Sandbox Code Playgroud)


Gre*_*ill 5

是的,type()内置函数有一个三参数形式可以做到这一点:

类型名称基础字典

返回一个新类型对象。这本质上是声明的动态形式class。名称字符串是类名,成为属性基元组__name__逐项列出基类并成为属性;dict字典是包含类主体定义的名称空间,并成为属性。__bases____dict__