Python3使用反射迭代地调用类的成员

时间:2020-03-04 10:57:19

标签: python-3.x reflection

使用Python3,我试图调用包含is_has_的类的成员。他们的退货被硬编码到True

这就是我实现的方法,我不知道如何使用black_magic方法实际调用存储的成员。有人可以帮忙吗?非常感谢。

import inspect
import unittest
class Foo:
    def is_bar(self):
        print(bar)
        return True
    def is_baz(self):
        print(baz)
        return True

class MyTest(unittest.TestCase):
    def setUp(self):
        self.object=Foo()
        self.object_members=inspect.getmembers(self.object)
    def test_assertions_when_typical(self):
        self.assertEqual(True,True)
        for member in self.object_members:
            member_name, member_address = member        
            if "is_" in member_name or "has_" in member_name:
                result=black_magic(member)
                self.assertEqual(result,True)

if __name__=='__main__':
    unittest.main()

我通过以下方式对此进行调用:

python3 -m unittest test_python_reflection_minimal_example.py

1 个答案:

答案 0 :(得分:2)

您可以使用以下本地实现的实现:

def black_magic(self, objectClass, member):
    return getattr(objectClass, member[0])()

并使用result=self.black_magic(self.object, member)对其进行调用。

说明:member是一个包含方法名称和方法引用的元组。然后,我们使用该名称并在self.object上调用方法。