@dataclass

dataclasses 모듈에서 제공하는 @dataclass 데코레이터를 일반 클래스에 선언해주면 데이터 클래스가 된다.

init(), repr(), eq()와 같은 메서드를 자동으로 생성

데이터의 불변성이 필요한 경우 @dataclass(frozen=True)

데이터 클래스 간에 대소비교가 필요한 경우 @dataclass(order=True)

데이터 클래스의 인스턴스를 hashable하게 만들고 싶은 경우, @dataclass(unsafe_hash=True)

from dataclasses import dataclass
from datetime import date


@dataclass
class User:
    id: int
    name: str
    birthdate: date
    admin: bool = False
  • 필드의 기본값은 인스턴스 간에 공유가 되기 때문에 가변 인수에 대한 기본값 할당이 허용되지 않음

dataclasses 모듈에서 제공하는 field 함수의 default_factory 옵션을 사용해서 매번 새로운 리스트가 생성될 수 있도록 해줘야한다.

class User:
    friends: List[int] = field(default_factory=list)


@property

getter, setter 호출

class Person:
    def __init__(self, first_name, last_name, age):
        self.first_name = first_name
        self.last_name = last_name
        self.age = age

    @property
    def age(self):
        return self._age

    @age.setter
    def age(self, age):
        if age < 0:
            raise ValueError("Invalid age")
        self._age = age
>>> person = Person("John", "Doe", 20)
>>> person.age
20
>>> person.age = -1
ValueError: Invalid age
>>> person.age = person.age + 1
>>> person.age
21


@staticmethod

class Calc:
    
    @staticmethod
    def add(a ,b):
        return a + b

cal = Calc()
cal.add(1,2)  # return 3

-인스턴스 메소드와 달리 self라는 인자를 갖지 않고 있다.


@classmethod

class Calc:
    
    @classmethod
    def add(a ,b):
        return a + b
cal = Calc()
cal.add(1,2)  # return 3

-인스턴스 메소드와 달리 cls라는 인자를 갖는다.


@classmethod와 @staticmethod의 차이

class Drink:
    default= "soda"
    
     def __init__(self):
        self.data = self.default
    
    @classmethod
    def class_drink(cls):
        return cls()
    
    @staticmethod
    def static_drink():
        return Drink()
    
class WhatDrink(Drink):
    default = "water"
water = WhatDrink.class_drink()    # return water
soda = WhatDrink.static_drink()   # return soda


출처

https://www.daleseo.com/python-dataclasses/ https://www.daleseo.com/python-property/ https://medium.com/@hckcksrl/python-%EC%A0%95%EC%A0%81%EB%A9%94%EC%86%8C%EB%93%9C-staticmethod-%EC%99%80-classmethod-6721b0977372