gpt4 book ai didi

python - 如何以抑制 Pylance 警告的方式声明没有值的类变量

转载 作者:行者123 更新时间:2023-12-05 08:45:33 42 4
gpt4 key购买 nike

我喜欢 Pylance (VS Code) 中的类型检查器,但似乎有一种情况我必须在忽略 Pylance 警告和类变量声明的最佳实践之间做出选择。很多时候,类变量是在类构造函数中使用 None 类型初始化的,然后再设置变量。例如:

class Person:
def __init__(self) -> None:
self.name:str = None

def setName(self, name:str) -> None:
self.name = name

在这种情况下,Pylance 在分配 self.name:str = None 时给出以下错误:

Cannot assign member "name" for type "Person"
Expression of type "None" cannot be assigned to member "name" of class "Person"
Type "None" cannot be assigned to type "str"

有没有什么方法可以在构造函数中声明self.name,这样就不需要一个值并且 Pylance 很高兴?

编辑:一些人建议使用 typing.Optional 来抑制这个 Pylance 警告。但是,如果创建另一个成员函数以返回 self.name 并保证它返回 str 的实例,则会生成另一个 Pylance 错误。请参阅以下示例:

class Person:
def __init__(self) -> None:
self._name:Optional[str] = None

@property
def name(self) -> str:
return self._name

@name.setter
def name(self, name:str) -> None:
self._name = name

在这种情况下,Pylance 会生成错误:

(variable) _name: str | None
Expression of type "str | None" cannot be assigned to return type "str"
Type "str | None" cannot be assigned to type "str"
Type "None" cannot be assigned to type "str"

理想情况下,有一些方法可以在构造函数中初始“分配”self._name,使其唯一允许的类型是 str 但未给出任何值(value)。这可能吗?

最佳答案

您需要通过 typing.Optional 将其设为可选:

#!/usr/bin/env python
from typing import Optional


class Person:
def __init__(self) -> None:
self.name: Optional[str] = None

def setName(self, name: str) -> None:
self.name = name

Python 3.10+ 通过 PEP 604 支持更简单的语法的 Union type expressions 1 ,例如:

    def __init__(self) -> None:
self.name: str | None = None

关于python - 如何以抑制 Pylance 警告的方式声明没有值的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72383861/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com