📜  Python中的数据类 | Set 6(与其他数据类型的相互转换)

📅  最后修改于: 2022-05-13 01:55:20.977000             🧑  作者: Mango

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)

输出:

make_dataclass()函数–

此函数通过以字符串的形式传递其名称和各种属性来帮助您创建 DataClass (不是 DataClass 对象的对象) 。当您想要动态创建属性名称可能取决于某些值的 DataClass 时,这会派上用场,然后您可以通过str变量传递它们的名称。
在上面的函数中,如果只提供name ,则typing.Any用于类型。
initrepreqorderunsafe_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)

输出:

由于这是最后一篇文章,这里有一个奖励函数。

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