Наследование всех подсказок типов аргументов __init__ от родительского классаPython

Программы на Python
Anonymous
Наследование всех подсказок типов аргументов __init__ от родительского класса

Сообщение Anonymous »

Я работаю с наследованием от других модулей и классов, созданных другими. И поэтому всякий раз, когда я создаю подкласс, который наследуется от существующего класса, такого как tkinter.Frame, pandas.Dataframe или sqlite3.Connection, я получаю все аргументы с их подсказками типа (я m, используя VS Code, и нажав Tab, он автоматически заполняет def __init__ и генерирует их). Но подсказки типов всегда не работают, особенно многоточие....
Я знаю, что это можно решить, импортировав подсказки типов если существует TypeVar или TypeAlias для него, или удалить их вообще, или даже удалить все лишние аргументы, которые мне на самом деле не нужны, и использовать вместо них *args, **kwargs, но Я этого не хочу.
Я хочу, чтобы мой подкласс функционировал так же, как суперкласс, и только расширял его функциональность. Я обнаружил, что явные аргументы с подсказками их типов позволяют лучше работать с классом и его возможностями.
Пример:

Код: Выделить всё

import tkinter
from tkinter import ttk

class MyFrame(ttk.Frame):
def __init__(self, master: tkinter.Misc | None = ..., *, border: tkinter._ScreenUnits = ...,
borderwidth: tkinter._ScreenUnits = ..., class_: str = ..., cursor: tkinter._Cursor = ...,
height: tkinter._ScreenUnits = ..., name: str = ..., padding: _Padding = ...,
relief: tkinter._Relief = ..., style: str = ..., takefocus: tkinter._TakeFocusValue = ...,
width: tkinter._ScreenUnits = ...) -> None:

super().__init__(master, border, borderwidth, class_, cursor, height, name,
padding, relief, style, takefocus, width)
В этом примере все многоточия вызывают проблемы, а некоторые подсказки типов не отображаются, например _Padding.
И запуск код с этим классом вызывает эту ошибку:

Код: Выделить всё

AttributeError: module 'tkinter' has no attribute '_ScreenUnits'
или

Код: Выделить всё

AttributeError: module 'tkinter' has no attribute '_Cursor'
И если бы я решил удалить все подсказки типов, я бы получил эту ошибку из-за многоточия:

Код: Выделить всё

TypeError: can only concatenate str (not "ellipsis") to str
это означает, что... передается как значение str.
Есть ли простой способ наследовать вводить подсказки из суперкласса, не нарушая при этом мой код?
Или я делаю что-то не так?

Подробнее здесь: https://stackoverflow.com/questions/772 ... rent-class

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