Проверьте, определен ли метод в базовом или производном классе - PullRequest
0 голосов
/ 21 мая 2019

Я хочу иметь функцию, сообщающую мне, является ли test исходной версией из базового класса или новой версией, реализованной в производном классе. Я обнаружил, что inspect.getfullargspec может решить мою проблему, но он не работает с Python 3, который необходим для моего случая.

class base_class(object):
    @staticmethod 
    def test(a, b, c):
        pass

class child_class(base_class):
    @staticmethod
    def test(a, b):
        pass 

class child_class_2(base_class):
    pass

1 Ответ

3 голосов
/ 21 мая 2019

Вам не нужен какой-либо необычный осмотр, чтобы сделать это:

>>> x = child_class_2()                                                     
>>> x.test                                                                  
<function base_class.test at 0x7fea1a07f7b8>

>>> y = child_class()                                                       
>>> y.test                                                                  
<function child_class.test at 0x7fea1a07f950>

По умолчанию напечатанное имя происходит из атрибута __qualname__ функции:

>>> x.test.__qualname__
base_class.test
>>> y.test.__qualname__
child_class.test

Хакерский способ получить название класса -

x.test.__qualname__[:-len(x.test.__name__) - 1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...