Python依赖性问题
我用以下方式设置脚本- a.py(新添加的脚本) b.py(Prod中的现有脚本) c.py(Prod中的现有脚本) 保存b.py和c.py的dir都位于PROD主机的路径中 当我从调度器调用a.py时,我得到Python依赖性问题,python,python-3.4,Python,Python 3.4,我用以下方式设置脚本- a.py(新添加的脚本) b.py(Prod中的现有脚本) c.py(Prod中的现有脚本) 保存b.py和c.py的dir都位于PROD主机的路径中 当我从调度器调用a.py时,我得到'module'对象没有属性method()错误。b.py中的method1()和method2()也不会执行 a、 py与b.py位于同一目录中,所以我假设PATH中不需要更新任何内容 我在这里搜索了SO,发现这可能是一个循环依赖性问题,但建议的解决方案中很少有一个在我的案例中不起作用
'module'对象没有属性method()
错误。b.py中的method1()和method2()也不会执行
a、 py与b.py位于同一目录中,所以我假设PATH中不需要更新任何内容
我在这里搜索了SO,发现这可能是一个循环依赖性问题,但建议的解决方案中很少有一个在我的案例中不起作用
关于如何解决此问题,有什么建议吗?另外,如果我要在与现有脚本相同的目录中创建更多脚本,那么解决这些问题的最佳方法是什么。- 您希望
返回什么?它应该在类的方法中调用,而不是直接在模块中调用super()
- 我希望在B.py中看到类或函数B的定义,因为它是在a.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')
def method1():
print(1)
def method2():
print(2)
从b进口b
进口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')
def method1():
print(1)
def method2():
print(2)
c.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')
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;博士:不能繁殖 首先-不要使用super().method()访问父方法。这是没有必要的。A类工艺方法应为:
def process(self):
self.testmethod()
c.method1()
c.method2()
您没有发布足够的代码来实际显示错误
当我像上面那样重新定义过程
并实例化A类对象时:
tester = A()
tester.process()
进程方法按预期工作。我在代码中没有看到任何循环依赖项。
super().method()
应该做什么?super().method()应该在b.py中调用该方法,它就是这样做的。我在a.py和b.py中列出了导入c,这让我相信存在循环依赖性问题。如果存在,那么这就不可能是完整的代码,这些调用在实际代码中是否在类内?是的,它在类内。我没有列出我在下面的评论中提到的完整代码。我不确定我是否应该在这里发布全部代码。也许我会编辑并提供更多信息。不,您不需要给出整个代码,但我们需要一个Yes,super()是从方法中调用的,在B.py中有一个类B。我不想在这里列出我的代码,所以只给出了核心代码段。我已经得到了一些反对票:)。然而,在我的实际代码中,所有内容都正确缩进,包括类定义等。在复制粘贴时,我可能遗漏了一些缩进,导致它看起来未格式化。抱歉,我在Python2.7和3.4上都运行了这个程序……Python2.7给了我TypeError:super()至少接受一个参数(0给定)
,而Python3.4运行得非常好。如何调用a.py?通过给出a.py的完整路径。保存这些脚本的目录是path中包含的PYTHONSCRIPTS env变量的一部分。如何调用A.process()
方法?创建A
(即A=A()
)的实例,然后对该新实例调用该方法?(即a.process()
)作为a.py的init的一部分,我也将其称为b.py的init()。之后,我调用a.process()