非 self 属性不能有类型提示(或者如何为类属性添加类型提示)

问题描述 投票:0回答:1

我尝试为类属性添加类型提示,但 Pycharm 不支持?

Python版本:3.9 平台:win10

class Person:
    name: str
    id: int


msg: Person = Person()
msg.name: str = 'test'  # err msg is 'Non self attributes cannot have type hints'

有什么建议吗?或者只使用

msg.name: str = 'test'
并忽略 Pycharm err msg

pycharm type-hinting python-typing python-3.9
1个回答
0
投票

因此,您不能将类型分配给类定义之外的类属性。这会导致如下不一致的情况:

class A:
   x: int

a = A()
a.x: int = 1

b = A()
b.x: str = 'test'
# What is the type of the x attribute now?
# Types must be consistent across class instances

好消息是,您不需要这样做。该类型是从示例中的类定义中获取的,因此您只需说:

class Person:
    name: str
    id: int


msg = Person()
msg.name = 'test'

如果“test”不是字符串,您的类型检查器会引发错误。

一个重要的收获是使用类型并不意味着您必须在任何地方使用类型 - 只要足以很好地定义类型即可。一般来说,函数应该注释所有参数和返回类型,类应该像您所做的那样具有类型注释,但除此之外,类型通常是可推断的。请注意,在新示例中,我没有在 msg 行上添加类型 - 该类型应该是可推断的。

© www.soinside.com 2019 - 2024. All rights reserved.