Python 如何使用在类中定义的类?
我试图在一个类中定义一个类。我不是想用这个来解决现实世界的问题。我只是想用这段代码学习PythonPython 如何使用在类中定义的类?,python,python-3.x,Python,Python 3.x,我试图在一个类中定义一个类。我不是想用这个来解决现实世界的问题。我只是想用这段代码学习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:',
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
回溯(最近一次呼叫最后一次):
文件“demo.py”,第14行,在
foo=foo()
文件“demo.py”,第8行,在_init中__
self.bar=bar()
NameError:未定义名称“Bar”
出了什么问题?当我们可以定义和使用在函数中定义的函数时,为什么对类不一样呢?我在使用
Bar
class时是否犯了错误?请改用Foo.Bar()
,因为Bar
不是全局名称。您需要通过Foo
访问Bar
(Bar
未在模块级别定义)
替换以下行:
self.bar = Bar()
与:
或
根据:
然后在新的执行框架中执行类的套件(参见第节)
),使用新创建的本地命名空间和
原始全局命名空间。(通常,套件只包含功能
定义。)当类的套件完成执行时,它的执行
框架被丢弃,但其本地名称空间被保存。班级
然后使用基类的继承列表创建对象
以及为属性字典保存的本地名称空间。班级
名称绑定到原始本地命名空间中的此类对象
self.bar = Foo.Bar()
self.bar = self.Bar()