我正在尝试使用python type()方法动态创建一个类。
所以,说我有一个基类'A'
>>> class A:
def __init__(self):
print("I am in init of A..")
现在我使用类型方法
创建子类'C'>>> C = type('C',(A,),{})
当我创建一个对象时
>>> c = C()
I am in init of A..
也正确调用基类的init ..
现在我想在我的init方法中做一些事情并编写一个自定义的init方法..
>>> def BsInit(self):
print ("I am in init of B..")
我创建一个类'B'并创建一个实例..
>>> B = type('B',(A,),{'__init__':BsInit})
>>> b = B()
I am in init of B..
A类的初始化根本没有被调用..
所以试图像这样修改BsInit方法:
>>> def BsInit(self):
super().__init__();
print ("I am in init of B..")
当我创建一个实例时,我得到以下错误...
>>> B = type('B',(A,),{'__init__':BsInit})
>>> b = B()
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
b = B()
File "<pyshell#19>", line 2, in BsInit
super().__init__();print ("I am in init of B..")
RuntimeError: super(): __class__ cell not found
我使用type()查找自定义init的所有示例都非常简单,就像初始化变量一样..但是如果我想调用基类Init也是如何做到的?
答案 0 :(得分:2)
你需要这样称呼它:super(B, self).__init__()
。
答案 1 :(得分:1)
你需要在init方法而不是self中传递cls。以下是您的问题的解决方案:
def init(cls):
super(type(cls), cls).__init__()
B = type('B',(A,),{'__init__':init})
b = B()
"I am in init of A.."