父类的引用同级

时间:2019-05-14 13:51:28

标签: python scope reference flake8 python-typing

我正在尝试定义类型定义(pyi)文件。在我所描述的模块中,有一个类,其成员的类型属于父类的成员(有关更清楚的解释,请参见下面的代码片段)。我的问题是,如果在Widget之前定义Dialog,为什么在Widget中引用Dialog时会引发flake8“未定义名称”错误?如何正确引用Widget

    class types():
        class Widget():
            ...

        class Dialog():
            def __getattr__(name) -> Widget:
                ...

1 个答案:

答案 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':
            ...