스택큐힙리스트

데이터 클래스란 무엇이며 일반 클래스와 어떻게 다른가요? 본문

카테고리 없음

데이터 클래스란 무엇이며 일반 클래스와 어떻게 다른가요?

스택큐힙리스트 2023. 4. 2. 16:47
반응형

PEP 557과 함께 데이터 클래스가 파이썬 표준 라이브러리에 소개되었습니다.

그들은 @dataclass 데코레이터를 사용하며 기본값이 있는 변할 수 있는 namedtuples로 알려져 있지만, 이게 정확히 무슨 의미인지 그리고 일반 클래스와 어떤 점이 다른 지 잘 이해되지 않습니다.

파이썬 데이터 클래스는 정확히 무엇이며, 언제 사용하는 것이 가장 좋은가요?

답변 1

데이터 클래스는 많은 로직을 포함하지 않고 상태를 저장하기 위해 지원되는 일반 클래스입니다. 대부분의 속성으로 이루어진 클래스를 만들 때마다 데이터 클래스를 만듭니다.

이 dataclasses 모듈의 역할은 데이터 클래스를 생성하기 쉽게 만드는 것입니다. 여러 번 반복되는 코드 작성을 대신해줍니다.

이 기능은 데이터 클래스가 해시 가능해야 할 때 특히 유용합니다. 이 경우 __hash__ 메소드와 __eq__ 메소드가 필요합니다. 디버그 용이성을 위해 사용자 정의 __repr__ 메소드를 추가하면 상당히 장황해 질 수 있습니다.

class InventoryItem:

'''Class for keeping track of an item in inventory.'''

name: str

unit_price: float

quantity_on_hand: int = 0

def __init__(

self,

name: str,

unit_price: float,

quantity_on_hand: int = 0

) -> None:

self.name = name

self.unit_price = unit_price

self.quantity_on_hand = quantity_on_hand

def total_cost(self) -> float:

return self.unit_price * self.quantity_on_hand

def __repr__(self) -> str:

return (

'InventoryItem('

f'name={self.name!r}, unit_price={self.unit_price!r}, '

f'quantity_on_hand={self.quantity_on_hand!r})'

def __hash__(self) -> int:

return hash((self.name, self.unit_price, self.quantity_on_hand))

def __eq__(self, other) -> bool:

if not isinstance(other, InventoryItem):

return NotImplemented

return (

(self.name, self.unit_price, self.quantity_on_hand) ==

(other.name, other.unit_price, other.quantity_on_hand))

dataclasses으로 당신은 그것을 축소할 수 있습니다.

from dataclasses import dataclass

@dataclass(unsafe_hash=True)

class InventoryItem:

'''Class for keeping track of an item in inventory.'''

name: str

unit_price: float

quantity_on_hand: int = 0

def total_cost(self) -> float:

return self.unit_price * self.quantity_on_hand

(이 예시는 더러운 욕설이므로 번역하지 않겠습니다.)

같은 클래스 데코레이터는 비교 메소드 ( __lt__ , __gt__ 등)를 생성하고 불변성을 처리할 수도 있습니다.

namedtuple 클래스는 데이터 클래스이지만 기본적으로 불변합니다 (시퀀스도 포함됩니다). #$ $ ** ^ $$$$& 클래스는 이와 관련하여 훨씬 더 유연하며, 쉽게 구성하여 #$ * &@@^ * $& 할 수 있습니다.

PEP는 attrs project에서 영감을 받았으며 (슬롯, 유효성 검사기, 변환기, 메타데이터 등을 포함하여) 더 많은 것을 할 수 있습니다.

예시를 보고 싶다면, 최근에 나는 몇 개의 dataclasses을 내 Advent of Code 솔루션에 사용했었다. day 7, day 8, day 11, 그리고 day 20의 솔루션을 보라.

만약 Python 버전 < 3.7에서 dataclasses 모듈을 사용하고 싶다면, backported module(3.6 버전 이상 필요)을 설치하거나 위에서 언급한 attrs 프로젝트를 사용할 수 있습니다.

답변 2

데이터 클래스(Dataset Class)는 파이썬에서 특별한 클래스로, 데이터를 저장하고 관리하는 데 사용됩니다. 일반 클래스와는 달리 데이터 클래스는 불변하거나 변경 불가능한 상태를 유지하므로 안정적으로 작업할 수 있습니다.

데이터 클래스는 일반 클래스와 달리 생성자, 변경자, 해시 및 같음 검사를 자동으로 생성하는 등 사용하기 쉬운 기능을 제공합니다. 이러한 기능은 코드 작성을 더 간단하게 만들어줍니다.

일반 클래스와는 달리, 데이터 클래스는 다음과 같은 측면에서 다릅니다.

1. 데이터 클래스는 불변하거나 변경 불가능합니다.

2. 생성자, 변경자, 해시 및 같음 검사 기능을 자동으로 생성합니다.

3. 데이터를 저장하고 관리하기 위한 다양한 내장 함수 및 라이브러리가 있습니다.

이러한 이유로 데이터 클래스는 많은 개발자들에게 인기가 있습니다. 데이터 클래스는 간단하고 직관적이며 안정적입니다. 따라서 데이터 처리 분야에서 많이 사용되고 있으며, 코드 작성을 더 쉽게 만드는 유용한 클래스입니다.

반응형
Comments