[英]Modify attributes when initializing an object with dataclasses
嗨,我是 Python 的新手。
我以前使用過類,但沒有使用過數據類。 在常規課程中,我可以使用其他屬性設置我的 class 的屬性。 並且在初始化我的 class 的 object 時還使用函數來修改屬性。
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}"
我在這里想念什么?
據我目前了解, __post_init__()
方法用於使用 class 方法初始化屬性。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.