기본값과 field()
기본값을 설정하고 field() 옵션을 사용해 보세요.
기본값과 field()은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
필드에 기본값 지정
함수 매개변수와 마찬가지로 데이터 클래스 필드에도 기본값을 지정할 수 있습니다. 기본값이 있는 필드는 인스턴스를 생성할 때 생략할 수 있습니다.
from dataclasses import dataclass
@dataclass
class Server:
host: str
port: int = 8080
print(Server('localhost'))
print(Server('example.com', 443))순서가 중요합니다
기본값이 있는 필드는 함수 인수와 정확히 같은 방식으로 기본값이 없는 필드 뒤에 와야 합니다. 그렇지 않으면 클래스를 정의할 때 Python이 TypeError를 발생시킵니다.
from dataclasses import dataclass
@dataclass
class User:
name: str # required
active: bool = True # optional
print(User('Alice'))변경 가능한 기본값의 함정
리스트나 딕셔너리처럼 변경 가능한 객체를 직접 기본값으로 사용할 수 없습니다. 모든 인스턴스가 같은 객체를 공유하게 되기 때문입니다. Python은 이를 감지하고 보호를 위해 ValueError를 발생시킵니다.
from dataclasses import dataclass
from typing import List
# This raises ValueError at class definition time:
try:
@dataclass
class Bad:
items: List[int] = []
except ValueError as e:
print('Error:', e)field(default_factory=...)
변경 가능한 기본값을 지정하려면 field(default_factory=...)를 사용합니다. 팩토리는 새 인스턴스마다 호출되므로 모든 인스턴스가 각자의 새로운 객체를 갖게 됩니다.
from dataclasses import dataclass, field
from typing import List
@dataclass
class Cart:
items: List[str] = field(default_factory=list)
a = Cart()
a.items.append('apple')
b = Cart()
print(a.items, b.items)default와 default_factory 비교
다른 field() 옵션도 함께 사용해야 할 때 불변 값에는 field(default=...)를 사용합니다. 변경 가능한 값에는 default_factory를 사용합니다. 두 옵션을 동시에 전달할 수는 없습니다.
from dataclasses import dataclass, field
@dataclass
class Config:
retries: int = field(default=3)
tags: list = field(default_factory=list)
print(Config())repr에서 필드 제외
repr=False 옵션을 사용하면 생성된 __repr__에서 필드가 숨겨집니다. 비밀 값이나 큰 내부 버퍼에 유용합니다.
from dataclasses import dataclass, field
@dataclass
class Account:
user: str
token: str = field(repr=False, default='secret')
print(Account('alice'))비교에서 필드 제외
compare=False를 사용하면 생성된 __eq__(및 정렬)에서 필드가 제외됩니다. 해당 필드가 달라도 두 인스턴스가 같을 수 있습니다.
from dataclasses import dataclass, field
@dataclass
class Event:
name: str
timestamp: float = field(compare=False, default=0.0)
print(Event('login', 1.0) == Event('login', 99.0))init=False 필드
init=False로 설정하면 필드가 __init__에서 제외됩니다. 일반적으로 기본값과 함께 사용하거나 __post_init__에서 값을 설정합니다.
from dataclasses import dataclass, field
@dataclass
class Circle:
radius: float
area: float = field(init=False, default=0.0)
c = Circle(2.0)
print(c)파생 값을 위한 __post_init__
__post_init__을 정의하면 생성된 __init__ 직후에 코드를 실행할 수 있습니다. 다른 필드에서 파생된 값을 계산하기에 적합한 위치입니다.
from dataclasses import dataclass, field
@dataclass
class Circle:
radius: float
area: float = field(init=False, default=0.0)
def __post_init__(self):
self.area = 3.14159 * self.radius ** 2
print(Circle(2.0))메타데이터 저장
metadata 인수는 임의의 매핑을 필드에 연결합니다. Python은 이를 무시하지만, 도구와 직접 작성한 코드에서 문서화나 검증 힌트로 읽을 수 있습니다.
from dataclasses import dataclass, field, fields
@dataclass
class Product:
price: float = field(metadata={'unit': 'USD'})
for f in fields(Product):
print(f.name, f.metadata)field() 옵션 조합
옵션은 함께 조합할 수 있습니다. 하나의 필드가 repr에서 자신을 숨기고, 비교에서 제외되며, 동시에 기본값을 가질 수 있습니다.
from dataclasses import dataclass, field
@dataclass
class Session:
user: str
token: str = field(default='x', repr=False, compare=False)
print(Session('alice'))
print(Session('alice') == Session('alice', token='different'))빠른 확인
데이터 클래스 필드에 비어 있는 리스트를 기본값으로 지정하려면 어떻게 해야 합니까?
복습
기본값을 설정하고 field() 옵션을 사용하는 방법을 배웠습니다.
- 기본값이 있는 필드는 필수 필드 뒤에 옵니다.
- 변경 가능한 기본값에는
default_factory를 사용합니다. repr,compare,init,metadata로 각 필드를 조정합니다.__post_init__은 파생 값을 계산합니다.
자주 묻는 질문
“기본값과 field()” 강의는 무료인가요?
네 — “기본값과 field()” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“기본값과 field()”에서 뭘 배우나요?
기본값을 설정하고 field() 옵션을 사용해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Python Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“기본값과 field()” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 데이터 클래스 정의하기
- 기본값과 field()
- 불변 및 비교 옵션
- attrs 라이브러리