我正在尝试定义类型定义(pyi)文件。在我所描述的模块中,有一个类,其成员的类型属于父类的成员(有关更清楚的解释,请参见下面的代码片段)。我的问题是,如果在Widget
之前定义Dialog
,为什么在Widget
中引用Dialog
时会引发flake8“未定义名称”错误?如何正确引用Widget
?
class types():
class Widget():
...
class Dialog():
def __getattr__(name) -> Widget:
...
答案 0 :(得分:0)
您需要将[Id]
,[UserName]
,[NormalizedUserName]
,[Email]
,[NormalizedEmail]
,[EmailConfirmed]
,[PasswordHash]
,[SecurityStamp]
,[ConcurrencyStamp]
,[PhoneNumber]
,[PhoneNumberConfirmed]
,[TwoFactorEnabled]
,[LockoutEnd]
,[LockoutEnabled]
,[AccessFailedCount]
,[FirstName]
,[SecondName]
,[Company]
,[CompanyAdress]
,[CompanyEmail]
,[CompanyName]
,[CompanyPhoneNumber]
,**[UserModel_FirstName]**
,**[UserModel_SecondName]**
,[Discriminator]
引用为Widget
(Python 3.7):
'Widget'
我不确定在这种情况下为什么有必要。
[Edit]:在某些特殊情况下,类型提示可能比linters要早一些;不管短毛猫如何,此语法都不会引发错误,而您发布的语法确实会引发NameError:未定义名称“ Widget”。
OTH,这有效:
class types():
class Widget():
...
class Dialog():
def __getattr__(name) -> 'Widget':
...