Python 必须使用X实例作为第一个参数调用unbound方法(改为使用X实例)
我在Python 2代码(2.7.9)中得到以下错误消息: TypeError:必须使用AccessCd实例作为第一个参数调用未绑定的方法issueTransitionJIRA()(改为使用AccessCd实例) 所以python抱怨第一个参数应该是我实际传递的类实例。。?!当然,我遗漏了一些东西,但我还没有得到它,在类似的错误消息上搜索其他答案。。。谁能帮我解释一下吗?非常感谢 以下是我的代码结构: 主文件w32AccessCd.py: 模块文件转换statustracking.py: 错误:Python 必须使用X实例作为第一个参数调用unbound方法(改为使用X实例),python,python-2.7,oop,Python,Python 2.7,Oop,我在Python 2代码(2.7.9)中得到以下错误消息: TypeError:必须使用AccessCd实例作为第一个参数调用未绑定的方法issueTransitionJIRA()(改为使用AccessCd实例) 所以python抱怨第一个参数应该是我实际传递的类实例。。?!当然,我遗漏了一些东西,但我还没有得到它,在类似的错误消息上搜索其他答案。。。谁能帮我解释一下吗?非常感谢 以下是我的代码结构: 主文件w32AccessCd.py: 模块文件转换statustracking.py: 错误:
TypeError: unbound method issueTransitionJ() must be called with AccessCd instance as first argument (got AccessCd instance instead)
Python运行脚本时,该文件存储在
\uuuu main\uuu
名称空间中。另一方面,将其作为模块导入会将其置于
命名空间中
您正在运行w32AccessCd.py
作为主脚本,定义\uuuuuu main\uuuuuuu.AccessCd
然后导入transitionStatusTracking
,它将翻转并导入w32AccessCd
。这将创建该模块的第二个副本,即w32AccessCd
名称空间。您现在还拥有w32AccessCd.AccessCd
。这是一个单独的类,与其他类不同
接下来发生的是:
创建类型为accesscd=accesscd()
的实例\uuuuu main\uuuuu.accesscd
调用\uuuu main\uuuuu.AccessCd.\uuuu init\uuuuu
\uuuuuuu main\uuuuuuu.AccessCd.main
创建一个\uuuu main\uuuu.AccessCd.main
的实例,在中传入transitionStatusTracking.tStateTrack
实例\uuuu main\uuuuuuuuu.AccessCd
- 调用
方法,该方法尝试将transitionStatusTracking.tStateTrack.setup
方法与w32AccessCd.AccessCd.issueTransitionJ()
实例一起使用,调用失败\uuuu main\uuuuu.AccessCd
- 在
模块中,从转换状态跟踪
\uuuuu main\uuuuu导入:
要使循环导入工作,必须将from __main__ import AccessCd
行移动到import transitionStatusTracking
块下方,否则该类尚未定义。或者在代码中使用class AccessCd
和referenceimport\uuuuu main\uuuu
现在你有了同样的课程\uuuu main\uuuuuu.AccessCd
- 创建第三个文件来编写脚本;说
,加上:main.py
并从from w32AccessCd import AccessCd accesscd = AccessCd()
模块中删除w32AccessCd
行。现在将只传递accesscd=AcessCd()
类实例w32AccessCd.AccessCd
- 直接调用方法而不是取消绑定:
这确保了方法被绑定到正确的实例,并且不再关心类来自何处def setup(self): self.ACCESSCD.issueTransitionJ(self.key, "error")
pythonw32accesscd.py
也许?@felipsmartins:谢谢你的快速回答,但你的意思是什么?那条线的哪一部分是错误的?或者我应该怎么做?(顺便说一句,参数“error”绝对不是错误,它只是一个有趣的随机事件;)@MartijnPieters:是的,目前我正在使用“pythonw32accesscd.py”这个调用测试程序。稍后,将从服务包装器中调用(此文件的)主类。@Kris:是的,但这正是您的代码失败的原因。非常感谢您的解释!第三个为我工作!:)也许你也可以帮我,为什么1号不起作用,但导致了那个问题。。。?从主导入访问CD导入错误:无法导入名称AccessCd@Kris:啊,你得到一个循环导入。您必须在定义类之后进行导入。
from w32AccessCd import AccessCd
accesscd = AccessCd()
def setup(self):
self.ACCESSCD.issueTransitionJ(self.key, "error")