2014-03-29 52 views
0

我有三個文件A.py,B.py和C.py兩類類初始化問題蟒蛇

A.py

from B import * 
class A: 
    def __init__(self): 
     b = B() 
     b._init_() 
     print "Hello" 

B.py

from A import * 

class B: 
    def __init__(self): 
     a = A() 

    def _init_(self): 
     print "hello" 

時我跑C.py有:

from B import * 

obj = B() 

我得到的錯誤

Traceback (most recent call last): 
    File "/home/siddhartha/workspace/link/C.py", line 3, in <module> 
    obj = B() 
    File "/home/abc/workspace/kinl/B.py", line 5, in __init__ 
    a = A() 
    File "/home/abc/workspace/kinl/A.py", line 4, in __init__ 
    b = B() 
NameError: global name 'B' is not defined 
+0

行'b = B()'在哪裏? – Holloway

+3

你爲什麼要命名一個'_init_'方法? –

+0

@ValentinLorentz只是爲了測試代碼。這不是我認爲的主要問題 – codious

回答

1

正如其他人已經評論(但未回答),您的代碼中有幾個邏輯問題。

  1. 無論是進口AB反之亦然,但不能同時使用。這是行不通的。
  2. 這兩個類想要在第一個地方彼此實例化的點是什麼?這會讓你無限循環。
  3. 如果你從另一個實例化一個,你應該保存對ith的引用,否則它將毫無意義。
  4. 名稱_init_非常混亂。
  5. 避免from ... import *。它混亂了你的名字空間。

我會做出一些修正,假設這是你想要什麼:

A.py:

from B import B # avoid * imports if not needed 
class A: 
    def __init__(self): 
     self.b = B() # save reference - otherwise it will get lost. 
     print "Hello from A.__init__()" 

B.py

# don't import A! 
class B: 
    def __init__(self): 
     self.do_init() 
     # don't call A() - *they* need *us*. 
    def do_init(self): # properly named 
     print "hello from B.do_init()" 

C.py現在可以按需要做:

from A import A 
from B import B 

obj1 = A() 
obj2 = B() 
+0

非常感謝這個解釋 – codious