Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 데이터 클래스(데이터 클래스)

<시간/>

데이터 클래스는 버전 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)