如何使用类中定义的类?

时间:2014-02-23 14:06:38

标签: 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:', 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类时犯了错误吗?

2 个答案:

答案 0 :(得分:4)

请改用Foo.Bar(),因为Bar不是全局名称。

答案 1 :(得分:3)

您需要通过Bar访问FooBar未在模块级别定义)

替换以下行:

self.bar = Bar()

使用:

self.bar = Foo.Bar()

self.bar = self.Bar()

根据Class definition

  

在   然后在新的执行框架中执行class的套件(参见章节   Naming and binding),使用新创建的本地命名空间和   原始全局命名空间(通常,套件仅包含功能   定义。)当类的套件完成执行时,执行它   帧被丢弃但保存了它的本地命名空间。一个类   然后使用基类的继承列表创建对象   以及属性字典的已保存本地名称空间。班级   name绑定到原始本地名称空间中的此类对象。