Dict처럼 사용한다 의 정의
A = dict() # or A = {}
A['name']='alex'
print(A['name'])# 결과
alex
파이썬에서 딕셔너리를 만들면, A['name']
처럼 대괄호를 이용하여 key에 해당하는 값을 가져오거나, A['name']='alex'
처럼 key, value 페어를 할당 할 수 있다. 이를 class에서도 사용하는 방법을 정리해보려 함.
클래스의 attribute 할당방식
class MyClass:
passA = MyClass()
A.name = 'alex' # 할당하기
print(A.name) # 가져오기# 결과
alex
클래스에서 dict처럼 행동하게 하려면?
dict처럼 가져오기
class MyClass:
passA = MyClass()
A.name = 'alex'
print(A['name'])# 결과TypeError: 'MyClass' object is not subscriptable
print(A.name)
을 print(A['name'])
로 바꾸면 위와같은 not subscriptable
에러가 뜨지만
class MyClass:
def __getitem__(self,key):
return getattr(self, key)A = MyClass()
A.name = 'alex'
print(A['name'])# 결과alex
pass
부분의 코드에__getitem__
,getattr
을 이용한 코드를 할당해주면 dict
에서 key
로 item
을 불러오는 것처럼 행동한다.
dict 처럼 할당하기
class MyClass:
def __getitem__(self,key):
return getattr(self, key)A = MyClass()
A['name']='alex'
print(A['name'])# 결과TypeError: 'MyClass' object does not support item assignment
A.name='alex'를
A['name']='alex'
로 바꾸면 위와같은 not support item assignment
에러가 뜨지만
class MyClass:
def __getitem__(self,key):
return getattr(self, key) def __setitem__(self,key,value):
return setattr(self, key, value)A = MyClass()
A['name']='alex'
print(A['name'])# 결과alex
코드에__setitem__
,setattr
을 이용한 코드를 할당해주면 dict
에서 key
로 item
을 할당해주는 것처럼 행동한다.
활용성?
내가 생각할때 이 방식의 장점은 class
에 빈번한 attribute
할당이 일어나기 쉬운경우 유용한 것 같다. pandas
의 dataframe
도 이 방식을 이용한 것이 아닐까 생각된다.
예를들면 내가 class A
에 미리 할당되지 않은 age
라는 property
를 즉석해서 추가하고 싶은경우, 커맨드라인에서는
a = A()
a.age = 10
이렇게 할당 할 수 있겠지만, front end
에서 string
형태로 age
라는 property
가 할당된다면 물론 아래 방식처럼 할 수 도 있겠지만
exac('a.{}={}'.format(age,10))
클래스에 위의 함수를 추가해주면
a['age']=10
새로운 attribute 를 추가 할 수 있다.
판다스 라이브러리를 파봐야하나…아마 위의 함수가 적용되어 있을 것만 같다.
끝