일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 2
- 프로그래밍
- 알고리즘
- 사이버보안
- 데이터구조
- 컴퓨터비전
- 데이터분석
- 코딩
- 소프트웨어
- I'm Sorry
- 머신러닝
- 컴퓨터공학
- 인공지능
- 자바스크립트
- 딥러닝
- Yes
- 빅데이터
- 컴퓨터과학
- 데이터베이스
- 프로그래밍언어
- 클라우드컴퓨팅
- 웹개발
- 보안
- 버전관리
- 네트워크
- 소프트웨어공학
- 파이썬
- 데이터과학
- 네트워크보안
- 자료구조
- Today
- Total
스택큐힙리스트
데이터 클래스란 무엇이며 일반 클래스와 어떻게 다른가요? 본문
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. 데이터를 저장하고 관리하기 위한 다양한 내장 함수 및 라이브러리가 있습니다.
이러한 이유로 데이터 클래스는 많은 개발자들에게 인기가 있습니다. 데이터 클래스는 간단하고 직관적이며 안정적입니다. 따라서 데이터 처리 분야에서 많이 사용되고 있으며, 코드 작성을 더 쉽게 만드는 유용한 클래스입니다.