簡體   English   中英

使用數據類初始化 object 時修改屬性

[英]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}"

我在這里想念什么?

數據類文檔https://docs.python.org/3/library/dataclasses.html

據我目前了解, __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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM