为什么在python中从对象显式子类化会导致全局NameError异常?

时间:2012-08-23 18:24:28

标签: python

我正在使用的一些遗留代码[代码被问题再现代码替换]:

class foo:
    pass

class bar(foo):
    def __new__(cls):
        global BIZ
        if BIZ is not None:
            pass

bar()

但是当我将其更改为

class foo(object):

然后python打印:

Traceback (most recent call last):
  File "test.py", line 11, in <module>
    bar()
  File "test.py", line 8, in __new__
    if BIZ is not None:
NameError: global name 'BIZ' is not defined

为什么会这样?

1 个答案:

答案 0 :(得分:3)

__new__ special method仅适用于new-style classes(直接或间接从object继承的那些)。如果没有子类化object,您的代码就不会被调用。