如何解决为什么命名数据类字段“日期”会导致RecursionError?
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",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()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。