当前位置: 首页 > 知识库问答 >
问题:

单例类型提示的未解析引用[重复]

云欣嘉
2023-03-14

有没有办法消除警告:

未解决的引用'DeviceManager'...

对于这种单例模式?

class DeviceManager:
    """ Holds all devices and manages their distributed use. """

    instance: Union[DeviceManager, None] = None  # warning Unresolved reference 'DeviceManager'

    @staticmethod
    def get_instance() -> DeviceManager:  # warning Unresolved reference 'DeviceManager'
        """ Singleton instance. """

        if DeviceManager.instance is None:
            DeviceManager()

        return cast(DeviceManager, DeviceManager.instance)

    def __init__(self) -> None:
        """ Create instance. """
        if DeviceManager.instance is None:
            DeviceManager.instance = self
        else:
            raise Exception("This class is a singleton!")

截图:

共有2个答案

李和裕
2023-03-14

对于Python3.7的早期版本,还有一种方法。要避免出现警告,只需提供如下字符串类型:


class DeviceManager:
    """ Holds all devices and manages their distributed use. """

    instance: Union['DeviceManager', None] = None

    @staticmethod
    def get_instance() -> 'DeviceManager':
        """ Singleton instance. """

        if DeviceManager.instance is None:
            DeviceManager()

        return cast(DeviceManager, DeviceManager.instance)

    def __init__(self) -> None:
        """ Create instance. """
        if DeviceManager.instance is None:
            DeviceManager.instance = self
        else:
            raise Exception("This class is a singleton!")

资料来源:https://www.pythonsheets.com/notes/python-future.html

常枫涟
2023-03-14

是的,如果您使用的是Python

问题是,在创建类时,它不存在,因此您的类型注释指向一些不存在的东西。

为了解决这个问题,您可以使用__future__导入注释中的,它将此类注释的计算推迟到类创建之后。

详见PEP 563。

 类似资料:
  • 有没有办法在类中定义参数的类型,以便该类型引用自身? 例如,以下内容不会运行: 错误:

  • 我实现了一个这样的树 但是在 PyCharm 中,我得到有解决方法吗?

  • 我有Python类,它们有彼此作为属性的实例 如果这些类是在同一个文件中定义的,那么这很好,但是在我的例子中,它们都非常大,我希望将它们移动到不同的文件中。但是,如果我这样做,我必须将导入和导入,这将导致循环导入错误。有人知道我可以使用哪种模式将和放在不同的文件中,保持类型暗示,并遇到循环导入错误吗?

  • 我遇到了一个错误 导入语句如下所示 Kotlin版本:1.1.51 提前致谢:)

  • 我正在Android Studio中尝试Kotlin和Kotlin Android扩展。我在Ubuntu 14.04上的Android Studio v1.5.1和OS X El Capitan上的Android Studio v1.5.1中都进行了尝试,得到了相同的结果。 下面是我正在做的事情: null 然后进入生成的content_main.xml文件,并为“hello World!”添加一

  • 以下内容产生了。我怎样才能解决它?