gpt4 book ai didi

python - 使用数据类初始化对象时修改属性

转载 作者:行者123 更新时间:2023-12-05 05:02:16 26 4
gpt4 key购买 nike

大家好,我是 Python 新手。
我以前使用过类,但没有使用过数据类。在常规类(class)中,我可以通过使用其他属性来设置我的类(class)的属性。并在初始化我的类的对象时使用函数修改属性。

class Person:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = self.to_upper(last_name)
self.full_name = f"{self.first_name}_{self.last_name}"

def to_upper(self, some_string):
return some_string.upper()

p1 = Person("john", "doe")
print(p1.first_name)
print(p1.last_name)
print(p1.full_name)

我希望对数据类也这样做,因为我认为数据类是常规类的改进版本。

from dataclasses import dataclass, field

@dataclass
class Person:
first_name: str
last_name: str = field(default_factory=to_upper)
full_name: str = field(default_factory=get_fullname)

def to_upper(self, some_string):
return some_string.upper()

def get_fullname(self, first_name, last_name):
return f"{first_name}_{last_name}"

我在这里错过了什么?

数据类文档 https://docs.python.org/3/library/dataclasses.html

最佳答案

据我目前的理解,__post_init__() 方法用于通过类方法初始化属性。

from dataclasses import dataclass, field

@dataclass(init=True)
class Person:
name: str = "None"
surname: str = "Why"

def to_upper(self,some_string):
return some_string.lower()

def get_fullname(self, first_name, last_name):
return f"{first_name}_{last_name}"

def __post_init__(self):
self.name: str = self.to_upper(self.name)



test = Person("Bob","Alice")

参见 https://www.python.org/dev/peps/pep-0557/#id38

@dataclass
class C:
a: float
b: float
c: float = field(init=False)

def __post_init__(self):
self.c = self.a + self.b

关于python - 使用数据类初始化对象时修改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62269803/

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