在Python3中,可以通过两种方式调用实例方法,即obj.ix()
或Foo.ix(obj)
。撇开它是否是个好主意:当使用后者时,是否有办法让实例方法被访问的类通过?调用unbound方法,获取它通过访问的类?
class Foo(object):
@classmethod
def cx(cls, obj):
print(cls.X)
def ix(self):
# Any way to get the class that ix was accessed through?
print(self.X)
class AFoo(Foo):
X = "A"
class BFoo(Foo):
X = "B"
a = AFoo()
AFoo.cx(a) # Prints "A"
AFoo.ix(a) # Prints "A"
b = BFoo()
BFoo.cx(b) # Prints "B"
BFoo.ix(b) # Prints "B"
AFoo.cx(b) # Prints "A"
AFoo.ix(b) # Prints "B" -> I would like "A", like classmethod.
BFoo.cx(a) # Prints "B"
BFoo.ix(a) # Prints "A" -> I would like "B", like classmethod.
正如你所看到的,所期望的行为是微不足道的实现与一个类的方法,但似乎没有成为一个方式做同样的一个实例方法。
很有意思,谢谢!似乎有不止一种方式去做,但这绝对是一个有效的答案,所以我接受了它。 – kloffy