必须以实例作为第一个a调用未绑定的方法
所以,我有一个类,其中类变量被设置为__init__
方法中类工厂的输出,如下所示:
def MyFooFactory():
def __init__(self, *args):
# Do __init__ stuff
def MyBar(myFoo_obj):
print "MyBar"
newclass = type("MyFoo", tuple(object), {"__init__": __init__, "MyBar": MyBar} )
return newclass
class Foo:
Bar = 0
def __init__(self):
if (type(Foo.Bar) is int):
Bar = MyFooFactory()
def MyBar(a_list):
for l in a_list:
Bar.MyBar(l)
但是,当我尝试这个
myBar_list = [Foo.Bar() for _ in range(x)]
Foo.MyBar(myBar_list)
TypeError:unbound方法必须使用Foo实例作为第一个参数调用MyBar()(而不是使用list)
发生这种情况是因为MyBar
在Foo
和MyFoo
中都有相同的名称,或者在这里还有其他一些内容?
作为参考,两个MyBar
方法都应该是未绑定的。
谢谢,
Python中的实例方法必须具有self
作为第一个参数(其中self
实际上只是一个正式的参数名称,因为它是第一个参数),所以您会拥有
def MyBar(self, a_list):
...
另一方面,如果你确实需要一个静态方法,你必须使用@staticmethod
装饰器:
@staticmethod
def MyBar(a_list):
...
另请参阅此答案:Python中的@staticmethod和@classmethod有什么区别?
这是因为你在MyBar
忘记了self
参数
尝试这个:
class Foo:
...
def MyBar(self, a_list):
for l in a_list:
Bar.MyBar(l)
如果它应该是“unbound”方法,请使用@staticmethod
装饰器:
该声明
Bar = MyFooFactory()
是分配一个本地的,而不是在Foo.MyBar
调用的类级Bar
成员
如果你想在一个方法里面指定语法
Foo.Bar = MyFooFactory()
课堂内部的范围规则有点令人惊讶。
链接地址: http://www.djcxy.com/p/55145.html