Python의 구조

Vaibhav Vaibhav 2023년10월10일
Python의 구조

파이썬은 객체 지향 프로그래밍 언어로 클래스와 객체가 있습니다. 반면 C는 객체 지향 프로그래밍 언어가 아니므로 이를 사용하여 기능적 프로그래밍만 수행할 수 있습니다. 그러나 C에는 사용자 정의 데이터 유형인 구조가 있습니다.

Python에는 구조가 없지만 다른 객체, 즉 데이터 클래스를 사용하여 구조를 구현하거나 동작을 나타낼 수 있습니다. 데이터 클래스는 필드와 이러한 필드를 조작하기 위한 CRUD 메서드(getter 및 setter)만 포함하는 클래스입니다. 이러한 클래스의 주요 목적은 데이터를 저장하거나 패키지 형태로 일부 데이터를 나타내는 것입니다. 데이터 클래스는 엔터티를 나타내며 엔터티에는 여러 매개 변수 또는 속성이 있으므로 데이터 클래스를 사용하면 모든 것을 단일 개체 아래에 더 쉽게 패키징할 수 있습니다.

이 기사에서는 Python에서 데이터 클래스를 사용하는 방법을 배웁니다.

Python의 데이터 클래스

Python 3.7은 데이터 클래스를 도입했습니다. 데이터 클래스는 기본 Python 클래스를 사용하여 구현할 수 있지만 데이터 클래스는 장면 뒤에서 필요한 대부분의 기능을 구현하므로 데이터 클래스에 대한 Python 코드를 더 짧고 읽기 쉽게 만듭니다. 원시 Python 클래스를 사용하여 구현하면 더 많은 제어가 가능하지만 더 큰 데이터 클래스의 경우 구현이 지저분하고 방대해져 관리할 수 없게 될 수 있습니다.

파이썬에는 dataclasses 모듈 내부에 정의된 데코레이터 dataclass가 있습니다. 이 데코레이터는 __init__(), __repr__() 등과 같은 데이터 클래스 내부에 필요한 특수 메서드를 자동으로 추가합니다.

다음은 예입니다.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self) -> float:
        return self.price * self.quantity

위에서 언급했듯이 @dataclass 데코레이터는 특수 메소드를 자동으로 추가합니다. 즉, 다음 __init__() 메서드가 자동으로 추가됩니다.

def __init__(self, name: str, price: float, quantity: int = 0):
    self.name = name
    self.price = price
    self.quantity = quantity

또한 이 데이터 클래스는 Item 유형의 개체를 만드는 데 사용할 수 있으며 이러한 개체는 일반 클래스 개체처럼 취급할 수 있습니다.

from dataclasses import dataclass


@dataclass
class Item:
    name: str
    price: float
    quantity: int

    def total_cost(self):
        return self.price * self.quantity


a = Item("Chocolate", 25, 100)
b = Item("Chips", 35, 150)
c = Item("Cookie", 10, 50)
print(a)
print(b)
print(c)
print(a.total_cost())
print(b.total_cost())
print(c.total_cost())

dataclass 데코레이터에는 다음과 같은 몇 가지 매개변수가 있습니다.

  • init - 기본적으로 True. True이면 데이터 클래스의 __init__() 메서드가 정의됩니다.
  • repr - 기본적으로 True. True인 경우 데이터 클래스의 __repr__() 메서드가 정의됩니다.
  • eq - 기본적으로 True. True인 경우 데이터 클래스의 __eq__() 메서드가 정의됩니다.
  • order - 기본적으로 False. True이면 데이터 클래스의 __lt__(), __le__(), __gt__()__ge__() 메서드가 정의됩니다.
  • unsafe_hash - 기본적으로 False. False인 경우 데이터 클래스의 __hash__() 메서드가 정의됩니다.
  • frozen - 기본적으로 False. True인 경우 데이터 클래스 속성이 고정됩니다. 즉, 초기화되면 더 이상 조작할 수 없습니다.
  • match_args - 기본적으로 True.
  • kw_only - 기본적으로 False. True이면 데이터 클래스의 모든 필드가 키워드 전용으로 표시됩니다.
  • slots - 기본적으로 False.

이러한 매개변수는 클래스 구현 위에 dataclass 데코레이터를 배치할 때 구성할 수 있습니다. 다음과 같은 몇 가지 예가 있습니다.

@dataclass
class A:
    pass


@dataclass(init=True, repr=True, order=True)
class B:
    pass


@dataclass(
    eq=True,
    order=False,
    unsafe_hash=True,
)
class C:
    pass

dataclasses 모듈에 대한 자세한 내용은 여기 공식 문서를 참조하십시오.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.

관련 문장 - Python Dataclass