必须以实例作为第一个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)

发生这种情况是因为MyBarFooMyFoo中都有相同的名称,或者在这里还有其他一些内容?

作为参考,两个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

上一篇: Unbound method must be called with instance as first a

下一篇: Implementing UUID as primary key