**kwargs를 이용한 클래스 작성

소환인·2023년 10월 11일
0

파이썬

목록 보기
6/8

이전 포스팅에서 *args를 에 대해 알아보았습니다. 이번 포스팅에선 그와 비슷하지만 더 확장된 개념인 **kwargs에 대해 다뤄보겠습니다.

**kwargs는 'keyword arguments'의 약자로, 이름 그대로 키워드 인자를 여러 개 받을 수 있는 파라미터입니다. *args와는 달리 **kwargs는 인자들을 딕셔너리 형태로 받아옵니다. 이를 통해 함수나 클래스에서 여러 개의 인자를 처리할 수 있습니다.

**kwargs의 기본 개념

**kwargs는 함수나 메서드에서 키워드 인자를 가변적으로 처리할 때 사용됩니다. 이를 통해 사용자는 함수를 호출할 때 인자의 이름과 값을 직접 지정해 전달할 수 있습니다. 이렇게 되면 코드의 가독성이 향상되고, 인자의 순서에 구애받지 않아도 됩니다.

예를 들어, 아래와 같이 간단하게 사용할 수 있습니다.

def my_function(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

**kwargs를 활용한 클래스 예제

이번엔 예제를 통해 **kwargs를 이용하여 클래스를 작성하는 방법을 연습해보겠습니다. 사용한 예제는 '제로베이스 데이터 취업스쿨' 수업에서 참고하였습니다.

class NormalTV:
    def __init__(self, **kwargs):
        kwargs.setdefault('inch', 55)
        kwargs.setdefault('color', 'black')
        kwargs.setdefault('resolution', '1080p')
        kwargs.setdefault('smart_tv', False)
        kwargs.setdefault('ai_tv', False)
        self._kwargs = kwargs

    def set_property(self, **kwargs):
        self._kwargs.update(kwargs)

    def get_property(self):
        return self._kwargs

    def print_tv_info(self):
        for key, value in self._kwargs.items():
            print(f'{key} : {value}')

위의 NormalTV 클래스는 **kwargs를 사용하여 여러 속성을 동적으로 설정하고 있습니다. set_property 메서드를 통해 속성을 업데이트하고, get_property 메서드로 현재 설정된 속성을 확인할 수 있습니다.

이제 TV4kTV8k 클래스를 살펴보겠습니다. 이 두 클래스는 NormalTV를 상속받습니다. 동시에 **kwargs를 사용해 속성들을 초기화하고 일부 속성값을 변경합니다.

class TV4k(NormalTV):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self._kwargs['resolution'] = '4k'

    def set_smart_tv(self):
        self._kwargs['smart_tv'] = True


class TV8k(NormalTV):
    def __init__(self, **kwargs):
        super().__init__(**kwargs)
        self._kwargs['resolution'] = '8k'

    def set_smart_tv(self):
        self._kwargs['smart_tv'] = True

    def set_ai_tv(self):
        self._kwargs['ai_tv'] = True

TV4k 클래스는 NormalTV의 모든 기능을 상속받고, resolution을 '4k'로 설정하며 스마트 TV 기능을 활성화하는 set_smart_tv 메서드를 추가로 제공합니다.

마무리

**kwargs는 코드의 유연성을 높여주며, 특히 클래스에서 다양한 속성을 동적으로 처리할 때 유용합니다. 위 예제에서 볼 수 있듯이, **kwargs를 활용하면 클래스의 인스턴스를 생성할 때 다양한 속성을 쉽게 설정할 수 있습니다.

profile
돌고돌아

0개의 댓글