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

2024-05-16 20:21:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在上下文中,我将使用提示这个问题的示例,即Scikit Bio的DNA序列类。在

基类是一个通用的python序列类。序列类从该类继承特定于核酸(DNA、RNA…)的序列。最后,还有一个从序列继承的DNA类,它强制执行特定的DNA字母表。在

所以下面的代码列出了DNA对象的所有属性。在

from skbio import DNA

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

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

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

^{pr2}$

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

如何在python中实现这一点?有没有一个内在的原因不去尝试这个呢?或者这是OOP中经常出现的问题吗?在


Tags: 对象字符串代码示例属性dir序列scikit
1条回答
网友
1楼 · 发布于 2024-05-16 20:21:27

属性通常不属于任何类。属性通常属于它们所属的对象。在

然而,方法与定义它们的类密切相关。在

考虑一下这个程序:

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)

如您所见,属性abc和{}中的每一个都与绑定到o的对象相关联。在任何技术意义上,它们都不涉及任何特定的类。在

然而,方法create_attrib_a和{}精确地携带了您想要的信息。了解^{}模块如何检索其定义的文件名和行号。在

相关问题 更多 >