如何区分在类上调用的方法和实例上的方法?

时间:2015-03-15 17:35:28

标签: python

我有以下问题;我想构造一个方法bar,它的行为不同,这取决于它是在实例上调用还是在类上调用。更具体地说,让我们考虑以下代码段:

class Foo:
    def bar(self):
        return "bar called on an instance of Foo"

class Meta(type):
    def __new__(cls, name, parents, dct):
        return type.__new__(cls, name, (Foo,), dct)

    def bar(self):
        return "bar called on a class instantiated by Meta"


class A(metaclass=Meta):
    def bar(self):
        return "bar called on an instance of A"

当然,如果我创建A类型的对象,A().bar()会返回"bar called on an instance of A"

但是,A.bar()会引发以下错误......

TypeError: bar() missing 1 required positional argument: 'self'

A.bar(A)返回"bar called on a class instantiated by Meta"。我承认我不理解,因为AMeta类型的对象......

那么,我该如何纠正这段代码呢?我的问题也有点广泛:确定属性表示法x.yx是否被视为类或方法的规则是什么?

0 个答案:

没有答案