Аннотации Python: возвращаемый тип как экземплярPython

Программы на Python
Anonymous
Аннотации Python: возвращаемый тип как экземпляр

Сообщение Anonymous »

Есть ли способ сообщить возвращаемому значению, что его тип должен принадлежать некоторому 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``
Изображение
Я не хочу, чтобы она (PyCharm IDE) показывала мне предупреждения, и я хочу, чтобы она хорошо работала с интеллектом.


Подробнее здесь: https://stackoverflow.com/questions/628 ... n-instance

Вернуться в «Python»