Как получить все методы класса - PullRequest
1 голос
/ 26 февраля 2020

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

class DBManagerInterface:

    @abstractmethod
    def __init__(self, table_name): raise NotImplementedError

    @abstractmethod
    def create_table(self): raise NotImplementedError

    @abstractmethod
    def drop_table(self): raise NotImplementedError



class DataBaseManager(DBManagerInterface):

    def __init__(self, table_name):
        self.table_name = table_name

    def drop_table(self):
        None

    def create_table(self):
        None


class Example:

def __init__(self, db_manager):
    self.db_manager = db_manager

def test(self):
    self.db_manager.create_table() # can't see the db_manager methods

В Example классе я получаю указатель DataBaseManager.

Я не хочу видеть все DataBaseManager методов (без необходимости искать их вручную в DataBaseManager.py файле)

Я использую python 3.5.2 и pycharm редактор

Возможно ли это?

Ответы [ 3 ]

2 голосов
/ 26 февраля 2020

PyCharm не знает, что может быть db_manager, поэтому он не может дать вам подсказки по редактированию.

Если ваша среда поддерживает это, аннотируйте аргумент, и PyCharm может сделать вывод типа оттуда:

    def __init__(self, db_manager: DBManagerInterface):
        self.db_manager = db_manager

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

    def __init__(self, db_manager):
        """
        :type db_manager: DBManagerInterface
        """
        self.db_manager = db_manager
1 голос
/ 26 февраля 2020

Причина, по которой вы не можете видеть методы класса DataBaseManager в атрибуте db_manager в классе Example, заключается в том, что нет причины, по которой переменная db_manager в методе __init__ должна быть экземпляр DataBaseManager.

Вы можете либо указать тип напрямую: https://docs.python.org/3/library/typing.html

Или проверить тип экземпляра в методе __init__:

class Example:

    def __init__(self, db_manager):
        if not isinstance(db_manager, DataBaseManager):
            raise ValueError
        self.db_manager = db_manager

После этого Pycharm поймет тип атрибута и покажет вам все возможные методы для объекта.

0 голосов
/ 26 февраля 2020

Попробуйте
print(dir(DataBaseManager))

Из документов :

Без аргументов верните список имен в текущей локальной области. С аргументом попытайтесь вернуть список допустимых атрибутов для этого объекта.

dir([object])

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