2016-08-16 39 views
0

看起来很简单,但我找不到解决方案。Python外部类

我用最简单的例子来展示下面的问题。

(我的班安静更复杂;))

文件A.py

import os, sys 
import B 
from B import * 
class _A(): 
    def __init__(self,someVars): 
     self.someVars = someVars 
    def run(self): 
     print self.someVars 

someVars = 'jdoe' 
B._B(someVars) 

文件B.py不进口匹配A

import A 
from A import _A 
class _B(): 
    def __init__(self,someVars): 
     self.someVars = someVars 
    def run(self): 
     A._A(self.someVars) 

import A - >回调:找不到_A

它只能当我这样做 -

from A import * 

但是并在逻辑上的功能被执行2次。

感谢所有

+0

它因为导入A不导入下划线的类。你在调用'A._A'而不是'_A'时,你可以直接调用'_A'。切勿使用'from A import *',总是使用'import A'或'from A_A'。你也不需要两个,一个会做。 [Underscored Class imports](http://stackoverflow.com/questions/551038/private-implementation-class-in-python)。 [导入与导入](http://stackoverflow.com/questions/710551/import-module-or-from-module-import) –

回答

0

没有必要先import X,然后from X import Y。如果你需要Y(即使Y*),只需要from X import Y。这可能是2次执行的原因。

此外,为什么模块之间存在循环依赖关系A -> B, B -> A?也许他们应该在一个文件呢?

0

由于循环依赖的,你所面临的导入错误,你可以继续你的工作为:

文件A.py:

import os, sys 
#Below two import lines does cyclic dependency between file A and B which is wrong and will give import error, 
#commenting below two lines will resolve your import error 
#import B 
#from B import * 
class _A(): 
    def __init__(self,someVars): 
     self.someVars = someVars 
    def run(self): 
     print self.someVars 

someVars = 'jdoe' 
#B._B(someVars) #comment and respective logic should be moved in B file 

此外,您应该使用import Afrom A import _A和如果你使用的是以后你应该直接调用这个类作为:_A(self.someVars)不是:A._A(self.someVars),这个调用约定将用于以前的导入样式(import A),为了更好的理解类和模块的外部使用,你可以参考呃下面的链接:https://docs.python.org/3/tutorial/modules.html