Python参数注释未解析的引用

Lai*_*kus 9 python annotations python-3.x

为什么说它找不到我的课?为什么我要创建另一个具有相同名称的类,以使其不抱怨?

from typing import Dict


class WeekDay:

    def __init__(self, day_number, day_name):
        self.day_name = day_name
        self.day_number = day_number

    @staticmethod
    def get_week_days() -> Dict[str, WeekDay]:  # WeekDay unresolved reference error
        weekdays = {
            "monday": WeekDay(1, "Monday"),
            "tuesday": WeekDay(2, "Tuesday"),
            "wednesday": WeekDay(3, "Wednesday"),
            "thursday": WeekDay(4, "Thursday"),
            "friday": WeekDay(5, "Friday"),
            "saturday": WeekDay(6, "Saturday"),
            "sunday": WeekDay(7, "Sunday")
        }
        return weekdays
Run Code Online (Sandbox Code Playgroud)

小智 12

来自docs(Section Forward references)

当类型提示包含尚未定义的名称时,该定义可以表示为字符串文字,稍后要解决.

这种情况通常发生的情况是容器类的定义,其中定义的类出现在某些方法的签名中.

所以为了解决这个只是用引号包装类型,像这样:

from typing import Dict


class WeekDay:
    def __init__(self, day_number, day_name):
        self.day_name = day_name
        self.day_number = day_number

    @staticmethod
    def get_week_days() -> Dict[str, 'WeekDay']:  # quote WeekDay 
        weekdays = {
            "monday": WeekDay(1, "Monday"),
            "tuesday": WeekDay(2, "Tuesday"),
            "wednesday": WeekDay(3, "Wednesday"),
            "thursday": WeekDay(4, "Thursday"),
            "friday": WeekDay(5, "Friday"),
            "saturday": WeekDay(6, "Saturday"),
            "sunday": WeekDay(7, "Sunday")
        }

        return weekdays
Run Code Online (Sandbox Code Playgroud)


小智 7

从 Python3.7 开始,您可以使用: from __future__ import annotations