Python中的数据类 | Set 6(与其他数据类型的相互转换)
先决条件: Python中的数据类 |设置 5
在 DataClass 系列的最后一篇文章中,我们将讨论如何将 DataClass 对象的值放入字典或元组对,以及如何以不同的方式创建 DataClass——从值,而不是直接定义它。
asdict()
函数——
dataclasses.asdict(instance, *, dict_factory=dict)
通过使用此函数,将 DataClass 对象传递给函数的instance
参数,可以简单地以字典的形式获取属性到值对的函数。
astuple()
函数–
dataclasses.astuple(instance, *, tuple_factory=tuple)
与 asdict 类似,通过将 DataClass 对象传递给函数的instance
参数,可以使用此函数简单地以元组的形式获取数据类属性的有序值。
from dataclasses import dataclass, field,
from dataclasses import asdict, astuple
@dataclass
class GfgArticle:
title : str
language: str
author: str
upvotes: int = field(default = 0)
dClassObj = GfgArticle("DataClass",
"Python3",
"vibhu4agarwal")
dictArticle = asdict(dClassObj)
tupleArticle = astuple(dClassObj)
print(dictArticle)
print(tupleArticle)
输出:
{‘title’: ‘DataClass’, ‘language’: ‘Python3’, ‘author’: ‘vibhu4agarwal’, ‘upvotes’: 0}
(‘DataClass’, ‘Python3’, ‘vibhu4agarwal’, 0)
make_dataclass()
函数–
dataclasses.make_dataclass(cls_name, fields, *, bases=(), namespace=None, init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
此函数通过以字符串的形式传递其名称和各种属性来帮助您创建 DataClass (不是 DataClass 对象的对象) 。当您想要动态创建属性名称可能取决于某些值的 DataClass 时,这会派上用场,然后您可以通过str
变量传递它们的名称。
在上面的函数中,如果只提供name
,则typing.Any
用于类型。
init
、 repr
、 eq
、 order
、 unsafe_hash
和 freeze 的值与它们在frozen
() 中的含义相同。
from dataclasses import make_dataclass, field
GfgArticle = make_dataclass(
'GfgArticle',
[
('title', str),
('language', str),
('author', str),
('upvotes', int, field(default = 0))
]
)
dClassObj = GfgArticle("DataClass",
"Python3",
"vibhu4agarwal")
print(dClassObj)
输出:
GfgArticle(title=’DataClass’, language=’Python3′, author=’vibhu4agarwal’, upvotes=0)
由于这是最后一篇文章,这里有一个奖励函数。
is_dataclass()
函数–
dataclasses.is_dataclass(class_or_instance)
如果其参数是数据类或dataclass
对象,则此函数返回True
,否则返回False
。
from dataclasses import is_dataclass
print(is_dataclass(dictArticle))
print(is_dataclass(tupleArticle))
print(is_dataclass(dClassObj))
print(is_dataclass(GfgArticle))
print(is_dataclass(dClassObj) and not isinstance(dClassObj, type))
print(is_dataclass(GfgArticle) and not isinstance(GfgArticle, type))
输出:
False
False
True
True
True
False