Python依赖问题

时间:2015-07-22 15:31:22

标签: python python-3.4

我的脚本设置方式如下 -

a.py (新添加的脚本)

from b import B
import c  

class A(B):  
def process(self):  
   super().method()  
   c.method1()
   c.method2() 

b.py (Prod中的现有脚本)

import c
class B(Exception):  
def method(self):  
   c.method1()
   c.method2()

c.py (Prod中的现有脚本)

def method1()... 
def method2()...

持有b.py& amp; c.py都在PROD主机的PATH中。

当我从调度程序调用a.py时,出现'module' object has no attribute method()错误。方法1()& b.py中的method2()不会被执行。

a.py与b.py在同一个目录中,所以我假设没有必要在PATH中更新。

我在这里搜索了SO,发现这可能是循环依赖问题,但是我建议的解决方案很少有用。

有关如何解决此问题的任何建议?如果我要在与现有目录相同的目录中创建更多脚本,那么解决这些问题的最佳方法是什么。

3 个答案:

答案 0 :(得分:0)

  • 您期望super()返回什么?它意味着在类的方法中调用,而不是直接在模块中调用。
  • 我希望在b.py中看到类或函数 B 的定义,因为它是您在 a.py 中导入的内容。

答案 1 :(得分:0)

更新我以前的回复(关于缩进)

所以我一直试图重现你的问题。这就是我所拥有的:

<强> a.py

来自b import B import c

class A(B):
    def __init__(self):
        super().__init__()
        print('a init')

    def process(self):
        super().method()
        c.method1()
        c.method2()


a = A()
a.process()

<强> b.py

import c

class B(Exception):
    def __init__(self):
        print('b init')

    def method(self):
        print('b start')
        c.method1()
        c.method2() 
        print('b done')

<强> c.py

def method1():
    print(1)

def method2():
    print(2)

从命令行调用a.pypython3.4 a.py我的输出是:

b init
a init
b start
1
2
b done
1
2

(这是你所期望的) tl; dr:无法复制。

答案 2 :(得分:0)

首先 - 不要使用super()。method()来访问父亲的方法。这不是必要的。 A类的处理方法应该是:

def process(self):
    self.testmethod()
    c.method1()
    c.method2()

您尚未发布足够的代码来实际显示错误。

当我如上所述重新定义process并实例化A类对象时:

tester = A()
tester.process()

流程方法按预期工作。