python - 为什么将数据类字段命名为“日期”会导致递归错误?
问题描述
from datetime import date
import dataclasses
@dataclasses.dataclass(frozen=True)
class A:
date: date = dataclasses.field()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py", line 1002, in wrap
return _process_class(cls, init, repr, eq, order, unsafe_hash, frozen)
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py", line 979, in _process_class
str(inspect.signature(cls)).replace(' -> None', ''))
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py", line 3040, in __str__
formatted = str(param)
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py", line 2558, in __str__
formatannotation(self._annotation))
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/inspect.py", line 1199, in formatannotation
return repr(annotation)
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py", line 249, in __repr__
return ('Field('
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py", line 249, in __repr__
return ('Field('
File "/usr/local/Cellar/python/3.7.7/Frameworks/Python.framework/Versions/3.7/lib/python3.7/dataclasses.py", line 249, in __repr__
return ('Field('
[Previous line repeated 491 more times]
RecursionError: maximum recursion depth exceeded
但这有效:
@dataclasses.dataclass(frozen=True)
class A:
date: date
这样做也是如此:
@dataclasses.dataclass(frozen=True)
class A:
date_: date = dataclasses.field()
这是一个错误,还是设计使然?
解决方案
这个:
date: date = dataclasses.field()
不注释date
为datetime.date
. 它注释date
为dataclasses.field()
,因为注释是在赋值之后评估的。dataclasses
不希望字段将自身作为其注释,您也不希望这样。
使用类似的东西
import datetime
import dataclasses
@dataclasses.dataclass(frozen=True)
class A:
date: datetime.date = dataclasses.field()
推荐阅读
- python - 如何使用多个 if 语句降低函数的复杂性
- python - pandas - 'int' 对象不可调用
- html - 我可以根据父元素属性的 _content_ 使用纯 CSS 匹配子元素吗?
- asp.net-web-api2 - 在内存中使用 Ninject 模拟控制器依赖关系的 Web API 集成测试
- macos - SwiftUI:窗口关闭时运行代码 macOS
- python - 使用 python 绘制大型数据集
- c# - 如何在启动时停止 c# 程序自动选择 Windows 窗体单选按钮
- python - 循环目录然后运行命令
- python - 为什么我没有从这个数组中得到最小的数字?
- php - .xlsx 下载后在 PhP 中刷新页面