data storage 목적으로 Python 3.7에 등장한 dataclasses 를 아래와 같은 예시로 사용할 수 있습니다.
class 재사용성도 높아지기 때문에 데이터를 관리하는 목적이라면 유용해보입니다.
# 기본 class 형태
class PersonInformation:
def __init__(
name: str,
age: int = 25,
address: str = "",
phone: str
) -> None:
"""
Person information class
Parameters:
name (str): 이름
age (int): 나이
address (str): 주소
phone (str): 폰 번호
"""
print("Initialized Class")
from dataclasses import dataclass
@dataclass
class PersonInformation:
name: str
age: int = 25 # 나이의 default 값
address: str = ""
phone: str = ""
추가 기능도 제공하는데, 간략하게 알아봅시다.
🔍 (frozen=True) 수정 불가
객체 생성 후, 값을 수정하는 것이 불가능하다.
from dataclasses import dataclass
@dataclass(frozen=True)
class PersonInformation:
name: str
age: int = 25 # 나이의 default 값
address: str = ""
phone: str = ""
p = PersonInformation("홍길동", 20)
print(f'내 이름은 {p.name}!')
# p.name = 3 # 에러 발생!
🔍 (order=True) 비교 연산자 가능
dataclasses 의 default 생성으로는 비교 연산자가 불가능하지만, 아래와 같이 한다면 가능하다.
여러개의 비교값이 있을 경우, 처음 선언된 인자 순으로 비교를 하기 때문에 가장 먼저 비교가 되어야 하는 인자를 앞으로 보내주자.
from dataclasses import dataclass
@dataclass(order=True)
class PersonInformation:
name: str
age: int = 25 # 비교 대상!
address: str = ""
phone: str = ""
hong = PersonInformation("홍길동", 20)
baek = PersonInformation("백길동", 25)
print(hong > baek) # False
🔍 field 추가 속성 제어
field 를 사용하면 추가적인 속성 제어가 아래와 같이 가능하다.
from dataclasses import dataclass, field
@dataclass(order=True)
class PersonInformation:
name: str
age: int = 25
address: str = field(default="", repr=False) # __repr__ 에서 제외
phone: str = field(default="", repr=False)
hong = PersonInformation("홍길동", 20)
print(hong) # PersonInformation(name='홍길동', age=20)
data storage 목적으로 Python 3.7에 등장한 dataclasses 를 아래와 같은 예시로 사용할 수 있습니다.
class 재사용성도 높아지기 때문에 데이터를 관리하는 목적이라면 유용해보입니다.
# 기본 class 형태
class PersonInformation:
def __init__(
name: str,
age: int = 25,
address: str = "",
phone: str
) -> None:
"""
Person information class
Parameters:
name (str): 이름
age (int): 나이
address (str): 주소
phone (str): 폰 번호
"""
print("Initialized Class")
from dataclasses import dataclass
@dataclass
class PersonInformation:
name: str
age: int = 25 # 나이의 default 값
address: str = ""
phone: str = ""
추가 기능도 제공하는데, 간략하게 알아봅시다.
🔍 (frozen=True) 수정 불가
객체 생성 후, 값을 수정하는 것이 불가능하다.
from dataclasses import dataclass
@dataclass(frozen=True)
class PersonInformation:
name: str
age: int = 25 # 나이의 default 값
address: str = ""
phone: str = ""
p = PersonInformation("홍길동", 20)
print(f'내 이름은 {p.name}!')
# p.name = 3 # 에러 발생!
🔍 (order=True) 비교 연산자 가능
dataclasses 의 default 생성으로는 비교 연산자가 불가능하지만, 아래와 같이 한다면 가능하다.
여러개의 비교값이 있을 경우, 처음 선언된 인자 순으로 비교를 하기 때문에 가장 먼저 비교가 되어야 하는 인자를 앞으로 보내주자.
from dataclasses import dataclass
@dataclass(order=True)
class PersonInformation:
name: str
age: int = 25 # 비교 대상!
address: str = ""
phone: str = ""
hong = PersonInformation("홍길동", 20)
baek = PersonInformation("백길동", 25)
print(hong > baek) # False
🔍 field 추가 속성 제어
field 를 사용하면 추가적인 속성 제어가 아래와 같이 가능하다.
from dataclasses import dataclass, field
@dataclass(order=True)
class PersonInformation:
name: str
age: int = 25
address: str = field(default="", repr=False) # __repr__ 에서 제외
phone: str = field(default="", repr=False)
hong = PersonInformation("홍길동", 20)
print(hong) # PersonInformation(name='홍길동', age=20)