이전 포스팅에서 *args를 에 대해 알아보았습니다. 이번 포스팅에선 그와 비슷하지만 더 확장된 개념인 **kwargs에 대해 다뤄보겠습니다.
**kwargs는 'keyword arguments'의 약자로, 이름 그대로 키워드 인자를 여러 개 받을 수 있는 파라미터입니다. *args와는 달리 **kwargs는 인자들을 딕셔너리 형태로 받아옵니다. 이를 통해 함수나 클래스에서 여러 개의 인자를 처리할 수 있습니다.
**kwargs는 함수나 메서드에서 키워드 인자를 가변적으로 처리할 때 사용됩니다. 이를 통해 사용자는 함수를 호출할 때 인자의 이름과 값을 직접 지정해 전달할 수 있습니다. 이렇게 되면 코드의 가독성이 향상되고, 인자의 순서에 구애받지 않아도 됩니다.
예를 들어, 아래와 같이 간단하게 사용할 수 있습니다.
def my_function(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
이번엔 예제를 통해 **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
메서드로 현재 설정된 속성을 확인할 수 있습니다.
이제 TV4k
와 TV8k
클래스를 살펴보겠습니다. 이 두 클래스는 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를 활용하면 클래스의 인스턴스를 생성할 때 다양한 속성을 쉽게 설정할 수 있습니다.