Python: определить объект класса, который является списком других методов в классе - PullRequest
1 голос
/ 16 апреля 2020

У меня есть следующий класс:

class Math():

    def double(self, x):
        return 2*x

    def triple(self, x):
        return 3*x

Теперь я хочу получить список методов, определенных в классе. Я могу сделать это следующим образом:

method_list = [func for func in dir(Math) if callable(getattr(Math, func)) and not func.startswith("__")]

Теперь я бы хотел, чтобы сама method_list была объектом класса Math. Не получается просто определить его (как сейчас, по крайней мере) внутри класса. Как я могу это сделать?

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020
class Math():

    def double(self, x):
        return 2*x

    def triple(self, x):
        return 3*x

    @classmethod 
    def method_list(cls):
       return [func for func in dir(cls) if callable(getattr(cls, func)) and not func.startswith("__") and func != "method_list"]

пример использования в интерактивном сеансе:

In [123]: Math.method_list()                                                                                                                                        
Out[123]: ['double', 'triple']

0 голосов
/ 16 апреля 2020

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

def addMethods(cls):
    method_list = [func for func in dir(cls) if callable(getattr(cls, func)) and not func.startswith("__")]
    cls.method_list = method_list
    return cls

@addMethods
class Math():
    pass
...