繁体   English   中英

python如何查找哪些父类定义了子对象的方法

[英]python how to find which parent classes define methods of a child object

对于上下文,我将使用提示此问题的示例,它是Scikit-Bio的DNA序列类。

基类是通用的python序列类。 Sequence类从该类继承特定于核酸(DNA,RNA ...)的序列。 最后,有一个继承自Sequence的DNA类,该类强制执行DNA的特定字母。

因此,以下代码列出了DNA对象的所有属性。

from skbio import DNA

d = DNA('ACTGACTG')
for attr in dir(d):
    # All the attributes of d.

如何找到每个属性所属的父类? 我对此感兴趣的原因是我正在查看源代码,并且希望能够知道可以找到要查看的每种方法的文件。

我能想到的最好的是这样的:

for attr in dir(d)
    print type(attr)

但这只是返回所有字符串类型(我猜dir()返回字符串列表)。

我如何在python中实现呢? 是否有根本原因不尝试此操作? 还是这在OOP中经常出现?

属性通常不属于任何类。 属性通常属于作为属性的对象。

但是,方法与定义它们的类密切相关。

考虑以下程序:

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)

如您所见,每个属性abcd与绑定到o的对象相关联。 从技术上讲,它们都不与任何特定类别相关。

但是,方法create_attrib_acreate_attrib_b恰好带有您所需的信息。 查看inspect模块如何检索其定义的文件名和行号。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM