首页 > 解决方案 > python中不允许嵌套类中的类变量是什么原因?

问题描述

似乎无法在嵌套子类中定义类级别变量,例如:

class Outer:
    def __init__(self):
        self.inner_object=self.Inner() 

    class Inner:
        static_variable = 0
        def __init__(self):
            Inner.static_variable = 1

我在最后一行代码中收到一条错误消息,指出“未定义内部”。

标签: pythonclass

解决方案


class陈述很棘手。他们创建了一个新的临时命名空间,但没有定义一个新的范围。由于Inner未在内部定义__init__,因此在调用时必须在封闭范围内查找名称__init__并且需要值 for Inner。但是下一个封闭范围不是class语句的主体,因此没有Inner找到 of 的定义。

引用Inner类的正确方法是将其正确地视为Outer类的属性。

class Outer:
   def __init__(self):
      self.inner_object = Outer.Inner()

   class Inner:
      static_variable = 0
      def __init__(self):
          Outer.Inner.static_variable = 1

也就是说,内部类在 Python 中很少定义,因为与 Java 不同,没有禁止在模块的顶层定义多个类。


推荐阅读