gpt4 book ai didi

python - 必须使用 X 实例作为第一个参数调用未绑定(bind)方法(取而代之的是 X 实例)

转载 作者:行者123 更新时间:2023-11-28 22:42:06 25 4
gpt4 key购买 nike

我在 Python 2-Code (2.7.9) 中收到以下错误消息:TypeError:未绑定(bind)方法 issueTransitionJIRA() 必须使用 AccessCd 实例作为第一个参数调用(取而代之的是 AccessCd 实例)

所以 python 提示第一个参数应该是我实际传递的类实例..?!当然我遗漏了一些东西,但我还没有得到它,搜索类似错误消息的其他答案......任何人都可以帮助/解释我吗?非常感谢!

这是我的代码结构:

主文件w32AccessCd.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:

from w32AccessCd import AccessCd

class tStateTrack:

def __init__(self, ACCESSCD):
self.ACCESSCD = ACCESSCD

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

错误:

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

最佳答案

当 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 的实例, 传入 __main__.AccessCd实例。
  • 您调用 transitionStatusTracking.tStateTrack.setup方法,它尝试使用 w32AccessCd.AccessCd.issueTransitionJ()使用 __main__.AccessCd 的方法实例,调用失败。

您有三种选择来解决此问题:

  • transitionStatusTracking模块,从 __main__ 导入:

    from __main__ import AccessCd

    要使循环导入工作,您必须移动 import transitionStatusTracking行到 class AccessCd下方 block ,否则该类尚未定义。或者使用 import __main__和引用 __main__.AccessCd在您的代码中。

    现在你有相同的类。

  • 创建第三个文件来编写脚本;说 main.py , 与:

    from w32AccessCd import AccessCd
    accesscd = AccessCd()

    并删除 accesscd = AcessCd()来自 w32AccessCd 的行模块。现在只有 w32AccessCd.AccessCd正在传递的类实例。

  • 直接调用方法而不是未绑定(bind):

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

    这确保方法绑定(bind)到正确的实例,并且类来自何处不再重要。

关于python - 必须使用 X 实例作为第一个参数调用未绑定(bind)方法(取而代之的是 X 实例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32010905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com