Python中的数据类 |第 5 组(初始化后)
先决条件: Python中的数据类 |设置 4
在这篇文章中,我们将讨论如何在对象创建过程中修改某些属性的值,而无需在__init__()
中使用 post-init 处理对其进行编码。
__post_init__()
:这个函数在创建时,在初始化 DataClass 的所有属性后由内置的 __init__() 调用。基本上,DataClass 的对象创建以__init__()
(构造函数调用)开始,以__post__init__()
(初始化后处理)结束。采用 -
当某些属性依赖于__init__()
中传递的参数但不直接从它们获取值时,此功能非常方便。也就是说,它们在对构造函数中接收的参数子集执行一些操作后获取它们的值。继续我们在本系列文章中看到的相同示例,假设有一个名为author_name
的属性,它从配置文件句柄获取其值到定义的字典name
中的名称映射。
因此author_name
取决于author
属性接收的配置文件句柄,因此在这种情况下使用__post_init__()
应该是一个理想的选择。
from dataclasses import dataclass, field
name = {'vibhu4agarwal': 'Vibhu Agarwal'}
@dataclass
class GfgArticle:
title : str
language: str
author: str
author_name: str = field(init = False)
upvotes: int = 0
def __post_init__(self):
self.author_name = name[self.author]
dClassObj = GfgArticle("DataClass", "Python3", "vibhu4agarwal")
print(dClassObj)
输出:
GfgArticle(title=’DataClass’, language=’Python3′, author=’vibhu4agarwal’, author_name=’Vibhu Agarwal’, upvotes=0)
default_factory
可以替代吗?
不,因为default_factory
接受零参数函数或可调用函数,所以它不能接收任何参数并在对它们执行一些操作后返回值。