Python 我可以在子类';建造师?

Python 我可以在子类';建造师?,python,python-3.x,pycharm,python-typing,Python,Python 3.x,Pycharm,Python Typing,我试图让PyCharm理解我的基本控制器类的子类只接受特定类型的小部件 最简单的例子: 将tkinter作为tk导入 类BaseWidgetController: def uu init(self,parent:'tk.Widget'):#parent总是某种小部件 self.\u parent=父 类EntryWidgetController(BaseWidgetController): 定义初始(自我,**kwargs): 超级() self._parent:'tk.Entry'#在这个类中

我试图让PyCharm理解我的基本控制器类的子类只接受特定类型的小部件

最简单的例子:

将tkinter作为tk导入
类BaseWidgetController:
def uu init(self,parent:'tk.Widget'):#parent总是某种小部件
self.\u parent=父
类EntryWidgetController(BaseWidgetController):
定义初始(自我,**kwargs):
超级()
self._parent:'tk.Entry'#在这个类中,我想让Pycharm理解_parent永远只是一个条目(tk.Widget的子类),但即使添加这一行也不会改变它的想法。
def say_类型(自身)->无:
打印(键入(self.\u parent))\PyCharm仍然认为\u parent是一个tk.Widget
ew=EntryWidgetController(父项=tk.Frame())
ew.say_type()#显然,这在运行时效果很好。

如果您想约束EntryWidgetController,使其只接受
tk.Entry
或子类,那么修复非常简单-只需执行即可

class EntryWidgetController(BaseWidgetController):
    def __init__(self, parent: 'tk.Entry', **kwargs):
        super().__init__(parent=parent, **kwargs)
那样

ew = EntryWidgetController(parent=tk.Frame())
将使PyCharm抱怨
预期的类型为“Entry”,而不是“Frame”