파이썬의 익명 객체

Muhammad Maisam Abbas 2023년6월21일
  1. Python에서 namedtuple 클래스로 익명 개체 만들기
  2. Python에서 type() 함수를 사용하여 익명 개체 만들기
파이썬의 익명 객체

이 자습서에서는 Python에서 익명 개체를 만드는 방법에 대해 설명합니다.

Python에서 namedtuple 클래스로 익명 개체 만들기

익명 객체는 실제 이름이 없는 값일 뿐입니다. 그래서 익명이라고 합니다.

때로는 완전히 새로운 클래스를 정의하는 것보다 값을 보유하기 위해 익명 개체를 만드는 것이 더 쉽습니다.

기본적으로 Python 프로그래밍 언어는 C# 및 Java와 달리 기본적으로 익명 클래스를 지원하지 않습니다. 그러나 약간의 창의성만 있으면 해결 방법을 찾고 익명 개체의 기능을 모방할 수 있습니다.

우선 Python의 collections 모듈 내부에 있는 namedtuple 클래스를 활용하여 익명 객체를 모방할 수 있습니다. 다음 코드는 Python의 namedtuple 클래스를 사용하여 익명 객체를 생성하는 방법을 보여줍니다.

from collections import namedtuple

anonymousClass = namedtuple("variables", ["foo", "woo", "boo"])

obj1 = anonymousClass(foo=1, woo=2, boo="3")
obj1.boo

출력:

'3'

먼저 명명된 튜플 anonymousClassnamedtuple("variables", ['foo', 'woo', 'boo']로 초기화했습니다. 생성자에서 값이 다음 목록인 키/값 쌍을 전달했습니다. 임시 값을 저장하게 될 변수 이름입니다.

우리의 사용 사례에서는 생성자의 키로 전달하는 것이 무엇이든 결과에 큰 영향을 미치지 않습니다. 이제 이 anonymousClass 개체를 사용하여 obj1 = anonymousClass(foo=1, woo=2, boo='3')로 익명 개체를 만들 수 있습니다.

이 방법의 좋은 점은 anonymousClass 개체가 재사용 가능하고 원하는 만큼 많은 익명 개체를 만들 수 있다는 것입니다. 이 접근 방식의 주요 단점은 namedtuple을 초기화하는 동안 변수의 수를 알아야 한다는 것입니다.

Python에서 type() 함수를 사용하여 익명 개체 만들기

익명 객체를 선언하는 또 다른 방법은 파이썬에서 type() 함수를 사용하는 것입니다. type() 함수는 3개의 매개변수를 사용합니다. 새 데이터 유형의 이름, 그 안에 있는 값의 데이터 유형 및 값 세트.

다음 코드 스니펫은 Python에서 type() 함수를 사용하여 익명 개체의 동작을 모방할 수 있는 방법을 보여줍니다.

obj = type("", (object,), {"foo": 1, "woo": 2, "boo": "3"})()
obj.boo

출력:

'3'

위의 코드에서 새 데이터 유형의 이름에 해당하는 type() 함수의 첫 번째 매개변수에 빈 문자열을 전달했습니다. 두 번째 매개변수는 object로 지정된 데이터 유형입니다.

세 번째 매개변수는 키가 변수의 이름이고 값이 해당 값인 키/값 쌍으로 제공된 값 세트입니다. 이전 접근 방식과 비교할 때 이 접근 방식에는 장점과 단점이 있습니다.

여기서 명백한 단점은 이전 예제의 anonymousClass와 달리 더 많은 익명 개체를 초기화하기 위해 obj를 재사용할 수 없다는 것입니다. 이 접근 방식의 장점은 변수를 먼저 선언하지 않고도 더 많은 변수를 지정할 수 있다는 것입니다.

type() 함수는 object 데이터 유형 대신 dict를 사용하여 이름을 먼저 지정하지 않고 새 값을 통합하도록 수정할 수 있습니다. 다음 코드 조각은 이 메서드의 작업을 보여줍니다.

obj3 = type("", (dict,), {"foo": 1, "woob": 2})()
obj3.boo = 123
obj3.boo

출력:

123

위의 코드에서 이전 예제의 objectdict로 대체했습니다.

위에서 설명한 두 가지 방법은 서로 장단점이 있습니다. 그들 중 어느 것도 확실한 승자는 아니며 우리의 사용 사례에 따라 다릅니다.

저장하게 될 값의 수를 이미 알고 있지만 여러 익명 개체가 필요한 경우 namedtuple 방법이 더 잘 작동합니다. 값의 수를 모르지만 익명 개체가 한두 개만 필요한 경우 type() 메서드가 더 좋습니다.

Muhammad Maisam Abbas avatar Muhammad Maisam Abbas avatar

Maisam is a highly skilled and motivated Data Scientist. He has over 4 years of experience with Python programming language. He loves solving complex problems and sharing his results on the internet.

LinkedIn

관련 문장 - Python Object