파이썬에서 객체를 선언하지 않고도 동적으로 속성을 추가할 수 있는 방법이 있습니다. `types.SimpleNamespace`를 사용하는 방법이 대표적입니다. 하지만 기본 `object`를 사용하려면 클래스를 선언해야 합니다. 여기 `types.SimpleNamespace`를 사용하는 방법과 기본 `object`를 사용하는 방법을 다시 정리해보겠습니다.
### 방법 1: `types.SimpleNamespace` 사용하기
`types.SimpleNamespace`를 사용하면 클래스 선언 없이도 객체에 동적으로 속성을 추가할 수 있습니다:
“`python
from types import SimpleNamespace
a = SimpleNamespace()
a.test = 1
a.haha = 2
print(a.test) # 출력: 1
print(a.haha) # 출력: 2
“`
### 방법 2: `object` 사용하기
클래스를 선언하지 않고 `object`를 사용하려면, 기본적으로 파이썬에서는 속성을 직접 추가할 수 없습니다. 그러나, 파이썬 객체의 `__dict__` 속성을 이용하여 속성을 동적으로 추가할 수 있습니다. 이 경우, 클래스를 선언하지 않고 `object`를 사용할 수 있습니다:
“`python
a = object()
a.__dict__ = {}
a.__dict__[‘test’] = 1
a.__dict__[‘haha’] = 2
print(a.__dict__[‘test’]) # 출력: 1
print(a.__dict__[‘haha’]) # 출력: 2
“`
하지만, `object` 객체에 `__dict__`를 설정하는 것은 파이썬의 일반적인 사용 방식은 아닙니다. 따라서, 위와 같은 방식보다는 클래스를 선언하거나 `SimpleNamespace`를 사용하는 것이 더 권장됩니다.
### 방법 3: 클래스를 선언하기
클래스를 선언하여 객체를 사용하는 전통적인 방법입니다:
“`python
class AnyObject:
pass
a = AnyObject()
a.test = 1
a.haha = 2
print(a.test) # 출력: 1
print(a.haha) # 출력: 2
“`
### 추가 방법: `types.DynamicClassAttribute` 사용하기 (고급)
파이썬에서 좀 더 고급 기능을 사용하고자 할 때는 `types.DynamicClassAttribute`를 사용할 수 있지만, 이 경우는 대부분의 사용 사례에서 필요하지 않습니다.
위의 예시 중, `types.SimpleNamespace`를 사용하는 것이 가장 간단하고 실용적입니다. 클래스를 선언하는 방법도 좋지만, 객체에 속성을 동적으로 추가하고 싶다면 `SimpleNamespace`를 사용하는 것이 좋습니다.
결론
클래스를 선언하지 않고 동적 객체를 사용하기 위해서는 SimpleNameSpace를 사용하는것이 가장 편함 |