我最近一直在使用 python 3.7,并正在寻找利用新数据类的方法。基本上我有一个方法可以迭代数据类字段并检查它们是否有默认值:
from dataclasses import fields, MISSING
@classmethod
def from_json(cls)
datacls_fields = fields(cls)
for field in datacls_fields:
if (field.default != MISSING):
#...
然而在官方文档中,它说:
MISSING值是一个哨兵对象,用于检测
如果提供了default和default_factory参数。这
使用哨兵是因为 None 是默认的有效值。无代码
应直接使用 MISSING 值。
有人知道更好/更Pythonic的方法吗?
这是定义MISSING
在python源代码中dataclasses.py
:
# A sentinel object to detect if a parameter is supplied or not. Use
# a class to give it a better repr.
class _MISSING_TYPE:
pass
MISSING = _MISSING_TYPE()
定义非常清楚,它的用例只是检查是否已提供参数,并区分值None
和未提供的值:
def my_func(a=MISSING):
if a is not MISSING:
# a value has been supplied, whatever his value
所以使用起来完全没问题在您的代码中进行值比较。通过告诉任何代码都不应直接使用 MISSING 值他们只是警告我们该变量没有特定用途(除了用于比较),并且不应在代码中使用以避免意外行为。
你应该更新你的代码以使用更Pythonic的语法is not MISSING
:
from dataclasses import fields, MISSING
@classmethod
def from_json(cls)
datacls_fields = fields(cls)
for field in datacls_fields:
if field.default is not MISSING:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)