Python 必须使用X实例作为第一个参数调用unbound方法(改为使用X实例)

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: 错误:

我在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
    块下方,否则该类尚未定义。或者在代码中使用
    import\uuuuu main\uuuu
    和reference
    \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")
    
    这确保了方法被绑定到正确的实例,并且不再关心类来自何处


错误在这里:AccessCd.issueTransitionJ(self.AccessCd,self.key,“error”)如何运行文件?这两个模块是否都用作Python的主脚本,比如
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")