在for循环中使用类方法

2024-09-29 23:16:08 发布

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

我有一个外部定义的模块,其中有许多方法。我可以用dir()得到所有方法,比如print(dir[Descriptors])['BalabanJ', 'BertzCT',...]。现在我想将所有方法应用于一个值列表[x1,x2,…]。如果我直接使用Descriptors.BalabanJ(x1),它就可以工作了。但是,我想做一个像这样的循环

from rdkit.Chem import Descriptors
for i in dir[Descriptors]:
    for x in [x1,x2,x3]:
        print(Descriptors.i(x))

,它说描述符中没有方法i。我该如何实现这一点?你知道吗


Tags: 模块方法infrom列表for定义dir
3条回答

您可以使用getattr检索它们

例如

class Bar:
    def __init__(self, foo):
        self.foo = foo

    def p(self):
        print(self.foo)

bar = Bar('hello word')
getattr(bar, 'p')()

请注意,如果没有methodi,则会引发值错误,但可以设置默认方法

getattr(bar, 'pr', lambda :print('no such method: pr'))()

您需要定义类并将其作为参数传递,就像我对bar所做的那样,如果它是类方法的话

from rdkit.Chem import Descriptors
for i in dir[Descriptors]:
    for x in [x1,x2,x3]:
        print(getattr(Descriptors, i)(x))

你可以看看getattr() official documentation

我想getattr就是你要找的

from rdkit.Chem import Descriptors
for i in dir(Descriptors):
    if callable(i):
        for x in [x1,x2,x3]:
            print(getattr(Descriptors ,i)(x))

我建议inspect

from rdkit.Chem import Descriptors
import inspect

for i in inspect.getmembers(Descriptors, callable):
    for x in [1, 2, 3]:
        print(i[0], i[1](x))  # name of function of Descriptors module, result

相关问题 更多 >

    热门问题