如何获得所有的类方法

时间:2020-02-26 07:18:38

标签: python pycharm

我有以下课程:

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.2pycharm编辑器

有可能吗?

3 个答案:

答案 0 :(得分:2)

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 :(得分:1)

在Example类的属性db_manager中看不到DataBaseManager类的方法的原因是,没有理由在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随后将了解属性的类型,并向您显示该对象的所有可能方法。

答案 2 :(得分:0)

尝试
print(dir(DataBaseManager))

docs:

不带参数的情况下,返回当前本地范围内的名称列表。使用一个参数尝试返回该对象的有效属性列表。

dir([object])