我打算用Python中函数名称的字符串调用模块的函数,但每当我在程序中调用我的类时,它都会给我这个错误:TypeError:必须使用foo实例作为第一个参数调用unbound方法bar() (没有得到任何东西)
有人能帮我吗
这是产生您描述的问题的典型情况.
class Foo(object):
def bar(self,x):
print(x)
foo=Foo()
Run Code Online (Sandbox Code Playgroud)
调用gettatrr(Foo,'bar')
返回未绑定的方法Foo.bar
.
getattr(Foo,'bar')(1)
Run Code Online (Sandbox Code Playgroud)
结果是
TypeError:必须使用Foo实例作为第一个参数调用未绑定的方法bar()(改为使用int实例)
该方法Foo.bar
称为"未绑定",因为在调用时不会提供实例(例如foo
)作为第一个参数.毕竟,当只Foo
提供课程时怎么可能呢?
另一方面,如果您提供该类的实例:
getattr(foo,'bar')(1)
Run Code Online (Sandbox Code Playgroud)
产量
1
Run Code Online (Sandbox Code Playgroud)
因为foo.bar
是一个"绑定"方法 - foo
将在调用时作为第一个参数提供foo.bar
.
PS.您的错误消息显示"...使用foo实例调用...".与我上面发布的错误消息相比,您的类似乎被称为小写foo
.请注意,PEP8样式指南建议始终使用大写字母命名类,使用小写字母命名实例.这样做可以帮助您避免此错误.