class A(object):
def get_class(self):
return self.__class__
class B(A):
def __init__(self):
A.__init__(self)
b = B()
print b.get_class()
このコードは<class '__main__.B'>
.
メソッドが定義されているクラス名 (つまり ) を取得するにはどうすればよいA
ですか?
ドキュメントから: https://docs.python.org/2/reference/datamodel.html#the-standard-type-hierarchy
クラス オブジェクトには__name__
属性があります。派生クラスの属性を介して基本クラスをイントロスペクトする方がクリーンな__bases__
場合があります (たとえば、コードが派生クラスに存在する場合)。
>>> class Base(object):
... pass
...
>>> class Derived(Base):
... def print_base(self):
... for base in self.__class__.__bases__:
... print base.__name__
...
>>> foo = Derived()
>>> foo.print_base()
Base
clsを含むクラスclsの基本クラスのタプルをメソッド解決順に返します。このタプルにクラスが2回以上表示されることはありません。メソッドの解決順序はclsのタイプに依存することに注意してください。非常に特殊なユーザー定義のメタタイプが使用されていない限り、clsはタプルの最初の要素になります。
import inspect
inspect.getmro(B)
結果は次のようになります。
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
最初の要素はクラス自体であり、2番目の要素は常に親の最初です。その後、物事は少し複雑になる可能性があります。
あなたは変えることができます
return self.__class__
return A().__class__
利用可能な A() の他のインスタンスがないため...