데이터 클래스는 버전 3.7부터 Python의 표준 라이브러리에 추가된 새로운 모듈입니다. 생성자 매직 메서드 __init__(), 문자열 표현 메서드 __repr__(), 사용자 정의 클래스에 대한 ==연산자(및 몇 가지 더)를 오버로드하는 __eq__() 메서드를 자동으로 생성하는 @dataclass 데코레이터를 정의합니다.
데이터 클래스 데코레이터에는 다음 서명이 있습니다.
dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False)
모든 인수는 각각의 매직 메소드 또는 메소드가 자동으로 생성되는지 여부를 나타내는 부울 값을 취합니다.
'init' 인수는 기본적으로 True입니다. 클래스에 대한 __init__() 메서드를 자동으로 생성합니다.
다음과 같이 데이터 클래스 데코레이터를 사용하여 학생 클래스를 정의합시다.
from dataclasses import dataclass @dataclass class Student(object): name : str age : int percent : float
자동 생성된 __init__() 메서드는 다음과 같습니다.
def __init__(self, name: str, age: int, percent: float): self.name = name self.age = age self.percent = percent
클래스가 __init__() 메서드를 명시적으로 정의하면 init 매개변수가 무시됩니다.
repr 인수도 기본적으로 true입니다. 따라서 __repr__() 메서드가 자동으로 생성됩니다. __repr__()은 객체의 형식적인 문자열 표현입니다. 클래스가 이미 __repr__()을 정의한 경우 이 매개변수는 무시됩니다.
eq 인수는 기본적으로 true 입니다. 이렇게 하면 __eq__() 메서드가 자동 생성됩니다. 이 메서드는 같음 비교 연산자(==)에 대한 응답으로 호출됩니다. 다시 말하지만, 클래스가 이미 __eq__()를 정의한 경우 이 매개변수는 무시됩니다.
'order' 매개변수가 true(기본값은 False)인 경우 비교를 위한 매직 메서드인 __lt__(), __le__(), __gt__() 및 __ge__() 메서드가 자동 생성되고 비교 연산자 <<=를 구현합니다.> 및>=각각. order가 true이고 eq가 false이면 ValueError가 발생합니다. 클래스가 이미 이러한 메서드를 정의한 경우) TypeError가 발생합니다.
unsafe_hash 인수가 False(기본값)이면 eq 및 frozen이 설정되는 방식에 따라 __hash__() 메서드가 생성됩니다.
frozen 인수:true(기본값은 False)인 경우 읽기 전용 고정 인스턴스를 에뮬레이트합니다.
>>> from data_class import Student >>> s1=Student('Naveen', 21, 50.50) >>> s2=Student('Mangesh', 20, 50.00) >>> s1==s2 False
어딕트()
이 함수는 클래스 인스턴스를 사전 객체로 변환합니다.
>>> import dataclasses >>> dataclasses.asdict(s1) {'name': 'Naveen', 'age': 21, 'percent': 50.5}
아스터플()
이 함수는 클래스 인스턴스를 튜플 객체로 변환합니다.
>>> dataclasses.astuple(s2) ('Mahesh', 20, 50.0)
make_dataclass()
이 함수는 필드 인수로 제공된 튜플 목록에서 새 데이터 클래스를 만듭니다.
>>> NewClass=dataclasses.make_dataclass('NewClass', [('x',int),('y',float)]) >>> n = NewClass(10,20) >>> n NewClass(x=10, y=20)