파이썬 익명 클래스와 객체 탐구하기
파이썬 내장 `type()` 함수는 객체가 속한 클래스를 반환합니다. 파이썬에서 내장 클래스든 사용자 정의 클래스든 모든 클래스는 `type` 클래스의 객체입니다.
예제
class myclass:
def __init__(self):
self.myvar = 10
obj = myclass()
print('class of int', type(int))
print('class of list', type(list))
print('class of dict', type(dict))
print('class of myclass', type(myclass))
print('class of obj', type(obj))
출력:
class of int <class 'type'>
class of list <class 'type'>
class of dict <class 'type'>
class of myclass <class 'type'>
`type()`에는 3인자 버전이 있습니다:
문법
newclass = type(name, bases, dict)
위 문법으로 클래스를 동적 생성할 수 있습니다. `type` 함수의 세 인자:
- name — 클래스명, 새 클래스의 `__name__` 속성이 됨
- bases — 부모 클래스 튜플. 파생 클래스가 아니면 비워둠
- dict — 새 클래스의 네임스페이스를 형성하는 딕셔너리. 속성, 메서드, 값 포함
익명 클래스 생성하기
위 `type()` 버전으로 익명 클래스 생성 가능. name 인자는 빈 문자열, 두 번째 인자는 객체 클래스 `object`를 포함한 튜플(파이썬 모든 클래스는 `object` 상속). 세 번째 인자 딕셔너리에 인스턴스 변수 추가. 지금은 비워둠.
anon = type('', (object,), {})
익명 객체 생성하기
이 익명 클래스의 객체 생성:
obj = anon()
print("type of obj:", type(obj))
결과: 객체가 익명 클래스 타입임 표시
type of obj: <class '__main__.'>
익명 클래스와 객체 예제
인스턴스 변수와 메서드도 동적 추가 가능. 다음 예제 참조:
def getA(self):
return self.a
obj = type('', (object,), {'a':5, 'b':6, 'c':7, 'getA':getA, 'getB':lambda self: self.b})()
print(obj.getA(), obj.getB())
출력:
5 6