python:构造函数进入无限循环

时间:2015-03-02 10:14:01

标签: python inheritance

我的目的是覆盖' 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()

为什么构造函数会进入无限循环?我做错了什么?

1 个答案:

答案 0 :(得分:2)

在编译时不会查找Python名称,在执行代码时会发生名称查找。

值得注意的是

First = Second
  • 由于分配,First()将创建class Second
  • 的实例
  • Second.__init__()会致电First.__init__()
  • First.__init__()
  • First将在全局范围内按名称查找
  • 自您重新分配First = Second后,名称 First指向class Second。哪个会被__init__()调用,这会给你无限的递归。

简而言之:不要这样做......