Python 必须以实例作为第一个实例调用Unbound方法
因此,我有一个类,其中一个类变量被设置为Python 必须以实例作为第一个实例调用Unbound方法,python,class,Python,Class,因此,我有一个类,其中一个类变量被设置为\uuu init\uu方法中类工厂的输出,如下所示: def MyFooFactory(): def __init__(self, *args): # Do __init__ stuff def MyBar(myFoo_obj): print "MyBar" newclass = type("MyFoo", tuple(object), {"__init__": __init__, "MyBar
\uuu init\uu
方法中类工厂的输出,如下所示:
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:必须以Foo实例作为第一个参数调用未绑定的方法MyBar()(改为Get list)
发生这种情况是因为MyBar
在Foo
和MyFoo
中都有相同的名称,还是有其他原因
作为参考,这两个MyBar
方法都应该是未绑定的
谢谢,这是因为您忘记了
MyBar中的self
参数
试试这个:
class Foo:
...
def MyBar(self, a_list):
for l in a_list:
Bar.MyBar(l)
如果它应该是“unbound”方法,请使用@staticmethod
:语句
Bar = MyFooFactory()
正在分配一个本地成员,而不是在Foo.MyBar
如果要在方法中指定该值,则语法为
Foo.Bar = MyFooFactory()
类主体中的作用域规则有些令人惊讶。Python中的实例方法必须将self
作为第一个参数(其中self
与其他任何参数一样,实际上只是一个正式的参数名-它由于是第一个参数而绑定到实例),因此
def MyBar(self, a_list):
...
另一方面,如果确实需要静态方法,则必须:
也可以看到这个答案:我没有忘记它,它应该是一个未绑定的方法。我明白了!这就是我做错的地方。那么,我该如何分配类级别Bar
?class Foo:\n Bar=myfoodfactory
(在\uuu init\uuuu
方法之外)应该做你想做的事情。那么,如果我写Foo.Bar=myfoodfactory()
的话,这会起作用吗?你可以在类定义里面做(见@6502答案下面的注释)。
@staticmethod
def MyBar(a_list):
...