0Pricing
Python Academy · 강의

기본값과 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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 데이터 클래스 정의하기
  2. 기본값과 field()
  3. 불변 및 비교 옵션
  4. attrs 라이브러리
← Python Academy(으)로 돌아가기