3

是否有一种简单的方法可以在保持所有 3 个级别的同时修复此错误?

从对象派生 ClassA 没有帮助。

提前致谢!

>>> class classA:
...     class classB(object):
...         def __init__(self):
...             self.b = 3
...         class classC(classA.classB):
...             def __init__(self):
...                 super(classC, self).__init__()
...                 self.c = 4
...
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in classA
  File "<stdin>", line 5, in classB
NameError: name 'classA' is not defined
4

2 回答 2

8

不。在您定义classC时,classA尚不存在。

它仅在其主体完全执行后创建。(从主体执行创建的 dict 是类创建调用的一个参数class = type('classname', (superclass_1, superclass_2, superclass_3), said_dict})。)

最简单的方法是将它们定义在同一级别。

如果绝对需要,您可以稍后修改它们:

class classA:
    pass
class classB(object):
    def __init__(self):
        self.b = 3
class classC(classB):
    def __init__(self):
        super(classC, self).__init__()
        self.c = 4
classA.classB = classB
classB.classC = classC
于 2013-01-09T15:09:38.737 回答
-1

也许这样的事情会起作用:

class classA:
    pass

class classB(object):
    def __init__(self):
        self.b = 3
classA.classB = classB

class classC(classA.classB):
    def __init__(self):
        super(classC, self).__init__()
        self.c = 4

classA.classB.classC = classC
于 2013-01-09T15:13:32.647 回答