代码之家  ›  专栏  ›  技术社区  ›  Shiplu Mokaddim

当名称已在同一模块中定义时,名称未定义错误

  •  1
  • Shiplu Mokaddim  · 技术社区  · 12 年前

    检查以下模块。

    # mod.py
    
    class A:
       o = B()
    
    class B:
       o = A()
    

    我有完全相同的模块。班级布局相同。我如何定义这样的事情?

    2 回复  |  直到 12 年前
        1
  •  4
  •   Martijn Pieters    12 年前

    B class A 执行(立即执行)。

    添加 A.o 之后 B 定义如下:

    class A:
        pass
    
    class B:
        o = A()
    
    A.o = B()
    
        2
  •  1
  •   geertjanvdk    12 年前

    (注:正在做的事情很奇怪,但只是回答问题)

    您可以在模块内的运行时设置属性。它有点难看,是的,但它是有效的Python:

    class A(object):
       pass
    
    class B(object):
       pass
    
    # setattr(B, 'o', A())
    # setattr(A, 'o', B())
    B.o = A()  # Making Martijn happy!
    A.o = B()
    
    if __name__ == '__main__':
        print A().o
        print B().o