我正在尝试在类中定义一个类。我并不想用这个解决现实世界的问题。我只是想用这段代码学习Python。
class Foo:
class Bar:
def __init__(self):
self.x = 'Bar'
def __init__(self):
self.x = 'Foo'
self.bar = Bar()
def print(self):
print('self.x:', self.x)
print('self.bar.x:', self.bar.x)
foo = Foo()
foo.print()
当我尝试执行此代码时,出现此错误:
Traceback (most recent call last):
File "demo.py", line 14, in <module>
foo = Foo()
File "demo.py", line 8, in __init__
self.bar = Bar()
NameError: name 'Bar' is not defined
出了什么问题?当我们可以定义和使用函数中定义的函数时,为什么类不一样?我在使用Bar
类时犯了错误吗?
答案 0 :(得分:4)
请改用Foo.Bar()
,因为Bar
不是全局名称。
答案 1 :(得分:3)
您需要通过Bar
访问Foo
(Bar
未在模块级别定义)
替换以下行:
self.bar = Bar()
使用:
self.bar = Foo.Bar()
或
self.bar = self.Bar()
在 然后在新的执行框架中执行class的套件(参见章节 Naming and binding),使用新创建的本地命名空间和 原始全局命名空间(通常,套件仅包含功能 定义。)当类的套件完成执行时,执行它 帧被丢弃但保存了它的本地命名空间。一个类 然后使用基类的继承列表创建对象 以及属性字典的已保存本地名称空间。班级 name绑定到原始本地名称空间中的此类对象。