Pythonのあるクラスのインスタンスが与えられた場合、各メソッドとプロパティを定義したソースコードの行を判別できると便利です(たとえば、 1を実装するため)。たとえば、モジュールab.pyが与えられます
class A(object):
z = 1
q = 2
def y(self): pass
def x(self): pass
class B(A):
q = 4
def x(self): pass
def w(self): pass
定義またはサブクラス化されたソースコード内のファイル名、クラス、および行を含むタプルを返す関数whither(class_、attribute)を定義しattribute
ます。これは、熱心なダイナミズムによる最新の割り当てではなく、クラス本体での定義を意味します。一部の属性に対して「不明」を返す場合は問題ありません。
>>> a = A()
>>> b = B()
>>> b.spigot = 'brass'
>>> whither(a, 'z')
("ab.py", <class 'a.A'>, [line] 2)
>>> whither(b, 'q')
("ab.py", <class 'a.B'>, 8)
>>> whither(b, 'x')
("ab.py", <class 'a.B'>, 9)
>>> whither(b, 'spigot')
("Attribute 'spigot' is a data attribute")
Ploneを内省するときにこれを使用したいと思います。ここでは、すべてのオブジェクトに数百のメソッドがあり、アルファベットだけでなくクラス別に整理すると非常に便利です。
もちろん、Pythonでは常に合理的に知ることはできませんが、ほとんど静的なコードの一般的なケースで良い答えを得るのは素晴らしいことです。