gpt4 book ai didi

检查数据类字段是否具有默认值的 Pythonic 方法

转载 作者:行者123 更新时间:2023-12-03 14:28:24 25 4
gpt4 key购买 nike

我最近一直在使用 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 value is a sentinel object used to detect if the default and default_factory parameters are provided. This sentinel is used because None is a valid value for default. No code should directly use the MISSING value.



任何人都知道更好/更pythonic的方法来做到这一点?

最佳答案

这是MISSING的定义在 dataclasses.py 中的 Python 源代码中:

# 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:

关于检查数据类字段是否具有默认值的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53589794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com