我的目的是覆盖' First'的一些功能。某些情况下的类运行时。所以我想从原来的类中派生出一个类。这是代码片段。
class First(object):
def __init__(self):
print "First"
super(First, self).__init__()
def foo(self):
print "foo"
class Second(First):
def __init__(self):
print "second"
super(Second, self).__init__()
def foo(self):
print "want to override this"
First = Second
o = First()
为什么构造函数会进入无限循环?我做错了什么?
答案 0 :(得分:2)
在编译时不会查找Python名称,在执行代码时会发生名称查找。
值得注意的是
First = Second
First()
将创建class Second
Second.__init__()
会致电First.__init__()
。 First.__init__()
中First
将在全局范围内按名称查找。First = Second
后,名称 First
指向class Second
。哪个会被__init__()
调用,这会给你无限的递归。简而言之:不要这样做......