我的脚本设置方式如下 -
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,发现这可能是循环依赖问题,但是我建议的解决方案很少有用。
有关如何解决此问题的任何建议?如果我要在与现有目录相同的目录中创建更多脚本,那么解决这些问题的最佳方法是什么。
答案 0 :(得分:0)
super()
返回什么?它意味着在类的方法中调用,而不是直接在模块中调用。答案 1 :(得分:0)
更新我以前的回复(关于缩进)
所以我一直试图重现你的问题。这就是我所拥有的:
<强> a.py 强>
来自b import B import cclass 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.py
:python3.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()
流程方法按预期工作。