Python3 итеративно вызывать членов класса с отражением - PullRequest
0 голосов
/ 04 марта 2020

Используя 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 Ответ

2 голосов
/ 04 марта 2020

Вы можете использовать следующую реализацию, которая работает локально:

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

и вызывать ее, используя result=self.black_magic(self.object, member).

Объяснение: member - это кортеж, содержащий имя метода и ссылка на метод. Затем мы используем это имя и вызываем метод для self.object.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...