我对下面的代码感到非常困惑:

import dataclasses

@dataclasses.dataclass()
class Base():
  x: int = 100

@dataclasses.dataclass()
class Derived(Base):
  x: int = 200

@dataclasses.dataclass()
class DerivedRaw(Base):
  x = 300


base = Base()
derived = Derived()
derived_raw = DerivedRaw()

print(base.x)
print(derived.x)
print(derived_raw.x)

它打印的内容是:

100
200
100

我不明白为什么最后一个数字不是300.为什么注释很重要?

这似乎是与@dataclasses.dataclass()的交互,代码:

class Base():
  x: int = 100

class DerivedRaw(Base):
  x = 300

derived_raw = DerivedRaw()

print(derived_raw.x)

确实打印300.

推荐答案

dataclass documentation:

@ Glaslass装饰师判断班级,找到fields个.字段被定义为具有type annotation的类变量.

...

因此,要拥有合适的类字段必须有类型注释.

Python相关问答推荐

Chatgpt API不断返回错误:404未能从API获取响应

追溯(最近最后一次调用):文件C:\Users\Diplom/PycharmProject\Yolo01\Roboflow-4.py,第4行,在模块导入roboflow中

删除所有列值,但判断是否存在任何二元组

PyQt5,如何使每个对象的 colored颜色 不同?'

在Django admin中自动完成相关字段筛选

lityter不让我输入左边的方括号,'

numpy.unique如何消除重复列?

Gekko中基于时间的间隔约束

巨 Python :逆向猜谜游戏

如何使用正则表达式修改toml文件中指定字段中的参数值

Tensorflow tokenizer问题.num_words到底做了什么?

如何在Python中将超链接添加到PDF中每个页面的顶部?

如何重新组织我的Pandas DataFrame,使列名成为列值?

如何将返回引用的函数与pybind11绑定?

Django在一个不是ForeignKey的字段上加入'

read_csv分隔符正在创建无关的空列

Pandas:计数器的滚动和,复位

操作布尔值的Series时出现索引问题

如何在PYTHON中向单元测试S Side_Effect发送额外参数?

Stats.ttest_ind:提取df值