如何返回作为参数传入的类方法的函数名称?

How do I return the function name of a class method being passed in as an argument?

提问人:Chephen 提问时间:9/22/2023 更新时间:9/22/2023 访问量:37

问:

我有一个类调用,它调用了一个名为类方法的类,我正在做一个练习来创建我自己的单元测试。我创建了一个如下所示的函数,因此我有一个包装函数来对我的所有类方法执行测试:bio_seqtranscribe()unitTest()

def unitTest(func, output):
    try:
        assert func == output
        print(f'{NAMEGOESHERE} Passed')
    except AssertionError:
        print(f'Test Failed for {NAMEGOESHERE}')

运行此代码将如下所示,其中实例化对象如下所示:test_dnabio_seq

unitTest(test_dna.transcribe(), 'AUGC')

如何获取 unitTest() 函数中 transcribe() 的方法名称以传递到 {NAMEGOESHERE} f 块中?

我试过使用 ne,但这返回了.<method-wrapper '__ne__' of bio_seq object at 0x000001CA41F6F2D0>

我希望上面的返回是:“转录”

python-3.x 函数 测试

评论

2赞 juanpa.arrivillaga 9/22/2023
没有将方法传递给 unitTest。您正在调用一个方法并传入结果。此时,无法访问该函数unitTest
0赞 Chephen 9/22/2023
啊,当然!您是否看到将此类方法传递给此函数的简单方法,或者仅在较小的规模上将函数名称的刺痛作为第 3 个参数传递给更有意义?@juanpa.阿里维拉加unitTest
0赞 juanpa.arrivillaga 9/22/2023
无论哪种方式都是可行的

答:

0赞 Alex Hall 9/22/2023 #1
def unitTest(func, output):
    try:
        assert func() == output
        print(f'{func.__name__} Passed')
    except AssertionError:
        print(f'Test Failed for {func.__name__}')

class DNA:
    def transcribe(self):
        return 3

test_dna = DNA()

unitTest(test_dna.transcribe, 3)
unitTest(test_dna.transcribe, 4)

评论

0赞 Chephen 9/22/2023
我了解这对常规函数的工作方式,但我正在尝试传入一个类方法,例如:.您将如何实现相同的输出?obj.foo()
0赞 Alex Hall 9/22/2023
@Chephen这是一回事,我编辑了演示。