我有一个带有两个嵌套类的主类:
class cls_1: class Enum_1(Enum): ... @dataclass class Nested: ... feature: Enum_1 #NameError: name 'Enum_1' is not defined
如您所见,我正在使用其中一个嵌套类作为另一个嵌套类的类型。但这会给出:NameError: name 'Enum_1' is not defined如代码中突出显示的那样。
NameError: name 'Enum_1' is not defined
我感觉我忽略了一些明显的东西,但不确定那是什么。
在 Python 中,嵌套类是类定义内部定义的类(类 A 内部的类 B)。如果你在嵌套类中访问外部类的成员或方法,或者在外部类中访问嵌套类,可能会遇到 “未定义的名称” 错误。通常这是因为类的作用域和访问权限导致的。
假设你写了如下代码,并且遇到了 NameError: name 'B' is not defined:
NameError: name 'B' is not defined
class A: class B: def __init__(self): print("B initialized") def __init__(self): print("A initialized") self.b = B() # Error: B is not defined a = A()
错误原因:在 A 的 __init__ 方法中直接访问 B 会导致 NameError,因为类 B 是 A 的嵌套类,只有在访问时通过 A.B 来正确引用它。
A
__init__
B
NameError
A.B
你应该通过外部类名来引用嵌套类。下面是修正后的代码:
class A: class B: def __init__(self): print("B initialized") def __init__(self): print("A initialized") self.b = A.B() # Correct: Referencing B as A.B a = A()
A.B()
self.b = A.B()
"B initialized"
如果你希望能够访问外部类的实例成员,可以通过传递外部类实例给嵌套类的构造函数来实现。例如:
class A: class B: def __init__(self, a_instance): self.a_instance = a_instance print("B initialized with A instance") def __init__(self): print("A initialized") self.b = A.B(self) # Passing current A instance to B a = A()
class A: class B: def __init__(self): print("B initialized") def __init__(self): print("A initialized") self.b = A.B() # Correct: Use A.B to access nested class def create_b(self): return A.B() # Correct: You can also access it within instance methods a = A() a.create_b()
希望这能帮助你解决 “未定义的名称” 错误!如果还有其他问题,欢迎继续提问。