Python3では、インスタンスメソッドは、obj.ix()
またはFoo.ix(obj)
という2つの方法で呼び出すことができます。それがよいアイデアかどうかを脇に置く:後者を使うとき、インスタンスメソッドがアクセスされたクラスを取得する方法はありますか?アンバインドメソッドを呼び出し、アクセスされたクラスを取得しますか?
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