python how to find which parent classes define methods of a child object
对于上下文,我将使用提示这个问题的示例,即Scikit Bio的DNA序列类。
基类是一个通用的Python序列类。一个序列类从该类继承特定的核酸(DNA,RNA…)序列。最后,还有一个dna类,它继承了执行dna特定字母表的序列。
所以下面的代码列出了DNA对象的所有属性。
1 2 3 4 5 | from skbio import DNA d = DNA('ACTGACTG') for attr in dir(d): # All the attributes of d. |
如何找到每个属性所属的父类?我之所以对此感兴趣,是因为我正在浏览源代码,我想知道我可以找到每个我想查看的方法的文件。
我能想到的最好的办法就是这样:
1 2 | for attr in dir(d) print type(attr) |
号
但这只返回所有字符串类型(我猜dir()返回字符串列表)。
如何在Python中实现这一点?有没有一个固有的理由不去尝试这个?或者这是经常出现在OOP中的事情?
属性通常不属于任何类。属性通常属于其作为属性的对象。
然而,方法与定义它们的类密切相关。
考虑这个程序:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | class base(object): def create_attrib_a(self): self.a = 1 class derived(base): def create_attrib_b(self): self.b = 1 def create_attrib_c(obj): obj.c = 1 import inspect o = derived() o.create_attrib_a() o.create_attrib_b() create_attrib_c(o) o.d = 1 # The objects attributes are relatively anonymous print o.__dict__ # But the class's methods have lots of information available for name, value in inspect.getmembers(o, inspect.ismethod): print 'Method=%s, filename=%s, line number=%d'%( name, value.im_func.func_code.co_filename, value.im_func.func_code.co_firstlineno) |
如您所见,每个属性
但是,方法