必须以X instance作为第一个参数调用unbound方法(改为获取X instance)

2024-10-01 17:40:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python2-Code(2.7.9)中收到以下错误消息: TypeError:必须使用AccessCd实例作为第一个参数调用未绑定方法issueTransitionJIRA()(改为获取AccessCd实例)

所以python抱怨第一个参数应该是我实际传递的类实例。。?!当然,我漏掉了一些东西,但我还没有得到它,在类似的错误信息上搜索其他答案。。。谁能帮我解释一下吗?谢谢!在

下面是我的代码结构:

主文件w32访问CD.py:

import transitionStatusTracking

class AccessCd:
    def __init__(self):
        # ...
        self.main()

    def main():
        tST = transitionStatusTracking.tStateTrack(self)
        tST.setup()

    # ...

    def issueTransitionJ(self, issuekey, workflowcmd):
        # ...
        return True     


accesscd = AccessCd()

模块文件transitionStatusTracking.py

^{pr2}$

错误:

TypeError: unbound method issueTransitionJ() must be called with AccessCd instance as first argument (got AccessCd instance instead)

Tags: 文件实例instancepyself参数maindef
1条回答
网友
1楼 · 发布于 2024-10-01 17:40:28

当Python运行脚本时,文件存储在__main__命名空间中。另一方面,将其作为模块导入会将其放入<name-of-module>命名空间中。在

您正在运行w32AccessCd.py作为主脚本,定义__main__.AccessCd。在

然后导入transitionStatusTracking,这会反过来导入w32AccessCd。这将创建该模块的第二个副本,作为w32AccessCd命名空间。你现在还拥有w32AccessCd.AccessCd。这是一个独立的类,与其他类不同。在

接下来发生的是:

  • accesscd = AccessCd()创建__main__.AccessCd类型的实例。在
  • __main__.AccessCd.__init__调用__main__.AccessCd.main。在
  • __main__.AccessCd.main创建{}的实例,并在中传递{}实例。在
  • 调用transitionStatusTracking.tStateTrack.setup方法,该方法试图将w32AccessCd.AccessCd.issueTransitionJ()方法与__main__.AccessCd实例一起使用,但调用失败。在

有三个选项可以解决此问题:

  • transitionStatusTracking模块中,从__main__导入:

    from __main__ import AccessCd
    

    为了使循环导入生效,您必须将import transitionStatusTracking行移到class AccessCd块之下的,否则该类尚未定义。或者在代码中使用import __main__和引用__main__.AccessCd。在

    现在你们有了同样的课。

  • 创建第三个文件来执行脚本;例如main.py,其中:

    ^{pr2}$

    并从w32AccessCd模块中删除accesscd = AcessCd()行。现在将只传递w32AccessCd.AccessCd类实例。

  • 直接调用方法而不是取消绑定:

    def setup(self):
        self.ACCESSCD.issueTransitionJ(self.key, "error")
    

    这样可以确保方法绑定到正确的实例,并且不再关心该类来自何处。

相关问题 更多 >

    热门问题