본문 바로가기

카테고리 없음

[Python] 클래스인데, 데이터 클래스는 무엇인가?

파이썬에 데이터 클래스라는 것이 있다. 

파이썬을 데이터를 다루는데 장점이 있는데, 클래스로 데이터를 중점적으로 다룰 때 사용하면 좋다. 

 

예시코드로 드가자.

 

# DATACLASS
# 클래스인데, 데이터 중점으로 사용하는 클래스
from dataclasses import dataclass
@dataclass
class Book:
    title: str
    author: str
    year_published: int

book1 = Book("네 인생 우습지 않다", "전한길", 2024)
print(book1)
 
 #데이터 클래스로하면 사용이 편리함 !!

처음에 from dataclasses import dataclass를 통해서 모듈을 불러온다.

그다음 @dataclass로 연결. > 데이터를 저장하는 간단한 클래스 만들기 좋다. 

 

class선언하는데, 기존이랑 선언방식이 다르다.

__init__:(self, A, B) 이런식으로 했었는데, 이번엔 그냥 받을 변수: 변수의 type을 콜론을 통해 써준다. (꼭 콜론이다)

 

book1을 프린트 한 결과는

 

 

멘토님께서 그런 말을 하셨었다. 유저들은 항상 창의적인 방법으로 오류를 일으켜주신다. 

 

어떤 사용자가 내가 int 이라고 선언한 변수에 str을 넣으면 어떻게 될까? 

이런 것을 반영한 예외처리가 필요하다 !

 

 

#심화로 가보자 / 어떤 사용자가 int 안넣고 str 넣으면 ?? 

@dataclass
class Student:
    name: str
    age: int
    major: str
    def __post_init__(self):
        if not isinstance(self.age, int):
            raise TypeError(f"나이는 숫자로 들어와야 합니다 !")
    
student1 = Student("샘", 37, "Artificial Intelligence")

 

 

예외처리에 쓴 저 메서드 __post_init__이라는 친구는 dataclass에서 제공하는 특별한 메서드다. 이 메서드는 데이터 클래스의 인스턴스가 초기화된 후 호출되고, 추가적인 초기화작업할 때 실행된다. 

 

 isinstance()는 파이썬에서 특정 객체의 유형을 확인하는데 사용된다. 

왼쪽 object에 확인하려는 대상, 오른쪽엔 확인하려는 정보를 써주면 된다. 

isinstance(self.age, int)니까 내가 이 클래스로 받은 age가 int인지 확인하겠다는 말이다. 

 

근데 또 어떤 유저는 같은 int인데, -로 값을 입력할 수도 있다. 그럴땐 이렇게 예외처리를 해줄 수도 있겠다.

    def __post_init__(self):
        if self.age < 0:
            raise ValueError("1 이상의 양수 입력해주세요")