gpt4 book ai didi

python - 函数变为 "unbound method"。为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:01 32 4
gpt4 key购买 nike

我想创建一个python类来封装一些全局变量:

class TestEnvironment(object):
_on_out = None
# ...

@staticmethod
def onOut():
return TestEnvironment._on_out

@staticmethod
def setOnOut(on_out):
TestEnvironment._on_out = on_out

# -------------------------------------------------------------------- #

def log(msg, process = None):
print msg

# -------------------------------------------------------------------- #

if __name__ == '__main__':
TestEnvironment.setOnOut(log)
print log
print TestEnvironment.onOut()
TestEnvironment.onOut()("A test")

运行时我得到:

<function log at 0x7fd7738122a8>
<unbound method TestEnvironment.log>
...
TypeError: unbound method log() must be called with TestEnvironment instance as first argument (got str instance instead)

似乎当我将 log 设置为 TestEnvironment 时,它变成了未绑定(bind)的方法。

我怎样才能超越它?

最佳答案

编辑:

删除了我的答案,因为它不再相关(问题似乎已经改变)。无论哪种方式 - 在 Python 3.6 上运行代码似乎都可以:

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux

<function log at 0x7f2787e0a488>
<function log at 0x7f2787e0a488>
A test

这是让它在 Python 2.7 中工作的方法:

def onOut():
return TestEnvironment.__dict__['_on_out']

查看this question

关于python - 函数变为 "unbound method"。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48321117/

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