Есть ли способ сообщить возвращаемому значению, что его тип должен принадлежать некоторому isinstance
?
например, def myfunction(...) -> instance[MyClass]:
(Это неформальная грамматика, я просто пример, я хочу, чтобы синтаксис что-то вроде этого)
, что означает, что он принимает только тот тип возврата, который принадлежит MyClass
.
Пример
Ниже приведен пример, чтобы вам было понятнее, что я использую для чего.
рассмотрите следующее:
from typing import List, TypeVar, Union, Type
class Table:
NAME: str
def show_info(self):
print(self.NAME)
class TableA(Table):
NAME = 'A'
def method_belong_a_only(self):
print('a only')
class TableB(Table):
NAME = 'B'
def method_belong_b_only(self):
print('b only')
class DBBase:
Tables: List[Table]
class MyDB(DBBase):
Tables = [TableA, TableB]
def get_table(self, table_name: str) -> Union[Table, None]:
table_list = [_ for _ in self.Tables if hasattr(_, 'NAME') and _.NAME == table_name]
if not table_list:
return None
if len(table_list) > 1:
raise ValueError('Table name conflict!')
return table_list[0]() # create an instance
, а затем, если я напишу следующее,
db = MyDB()
ta = db.get_table('A')
ta.show_info() # ok
# ta. # IDE will show method, which belongs to Table only.
ta.method_belong_a_only() # It still can run, but IDE show Cannot find reference 'method_belong_a_only' in Table|None
tb: TableB = db.get_table('B') # It still can run, but IDE show ``Expected type 'TableA', got 'Optional[Table]' instead``
# tb. # Now, It can show ``method_belong_b_only``
I don't want it(PyCharm IDE) to show warnings to me, and I want it works well on интеллект .