我有以下课程:
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
编辑器
有可能吗?
答案 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)