Python依赖性问题

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,发现这可能是一个循环依赖性问题,但建议的解决方案中很少有一个在我的案例中不起作用

我用以下方式设置脚本-

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,发现这可能是一个循环依赖性问题,但建议的解决方案中很少有一个在我的案例中不起作用

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

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

更新我之前的回复(关于独立)

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

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()