📜  Python中的数据类 |第 5 组(初始化后)

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

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)

输出:

default_factory可以替代吗?
不,因为default_factory接受零参数函数或可调用函数,所以它不能接收任何参数并在对它们执行一些操作后返回值。