2017-12-18 281 views
0

我一直在学习使用C++中的OOP学习python中的类。 我正在研究一个项目,我在一个文件中定义了一个类,并且在单独文件的类中使用了一个重要函数。 我必须在第一个文件中调用这个类,但是我得到了ImportError。 太棒了,如果你能帮到你。从其他python文件和后续类使用python函数?

try1.py

from try2 import prnt 

class a: 
    def __init__(self): 
     print("started") 
    def func1(self): 
     print("func1") 

prnt() 

try2.py

from try1 import a 

b = a() 
b.func1() 

def prnt(): 
    b.func() 

至于例如,在上面的例子中,当我运行try1.py,我得到一个ImportError:不能导入名称'PRNT'。

+4

循环进口永远不会好。 –

+0

糟糕的做法。我会考虑在try1中删除'import'和'prnt()',然后运行try2。所有'prnt()'都是在Python中复制'print()'一个已经可用的函数。 – Mangohero1

回答

0

你绝对需要重新设计你的项目。即使你设法逃脱循环进口(通过移动import的功能IE里面 - 但做),你仍然会得到一个NameError: name 'b' is not defined因为bprnt没有定义。

除非prnt不能a类中定义(为什么?),可以考虑在第三界定prnt,“utils的”文件,并在这两个try1.pytry2.py导入并传递一个对象到它,所以它可以访问所有的其属性。

+0

嘿@Deepspace,我一直在试图模仿这个cpp代码。有没有其他方法可以做到这一点?这两个cpp代码是:try1.cpp #include“try2.h” void a :: prnt(){ \t func1(); } int main(){ \t a ab(); \t ab.func1(); }和第二try2.h是#包括 类{ 私人: \t空隙func1的(){ \t \t的std :: COUT << “FUNC1”; \t} \t void prnt(); }; – Mayank

-2

只要运行你的代码,阅读错误,并从中扣除一些东西。 当你运行它,这里是错误消息:

Traceback (most recent call last): 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
    File "C:\Users\Kilian\Desktop\Code\Garbage\temp2.py", line 1, in <module> 
    from tmp import a 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
ImportError: cannot import name prnt 

您的脚本试图导入东西它已经试图导入早些时候。 Python可能会推断它不能导入它。 :)

+0

感谢downvote,但你会不会解释谁给了我这个? – IMCoins

+0

我没有downvote,但其他人可能有,因为他们想看到更多的指导。尽管更详细地解释问题很有用,但它可能会使OP处于“好吧,我现在看到我的代码因为这个原因而中断了,但我能做些什么呢?”。也许你可以推荐一种替代方式来安排项目的组成部分。 – Kevin

相关问题