Вам необходимо указать Widget
как 'Widget'
(python 3.7):
class types():
class Widget():
...
class Dialog():
def __getattr__(name) -> 'Widget':
...
Я не уверен, почему это необходимо в данном конкретном случае.
[Edit]: возможно, подсказки типа немного опережают пометки для некоторых угловых случаев; игнорируя линтер, этот синтаксис не генерирует ошибку, тогда как тот, который вы опубликовали, генерирует NameError: name 'Widget' не определено.
OTH, это работает:
class Widget:
pass
class Dialog:
def __getattr__(name) -> Widget:
pass