토큰을 검증하는 데코레이터에서 의문이 들었다.
다음 코드를 보자.
브라우저에서 요청을 받아 request
라는 object 가 넘어왔을 때 User object 를 request
obejct 에 담아func()
를 넘겨주는 코드이다.
그런데 request.user = user
로 추가했을 때 어떤식으로 attribute 가 object 에 추가되는지 궁금했다.
In [1]: class SomeObject(object):
...: pass
...:
In [2]: SomeObject.user = 'I am a user attribute'
In [3]: dir(SomeObject)
Out[3]:
['__class__',
'__delattr__',
'__dict__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__le__',
'__lt__',
'__module__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'__weakref__',
'user']
위의 코드처럼 파이썬에서 어떤 object 에 attribute 를 추가하려면
간단하게
<object>.<attribute> = <value>
이렇게 추가하면 된다.
.
으로 바로 객체에 접근하여 값을 할당할 수도 있고
내장 모듈 setattr()
을 이용하여 값을 할당할 수도 있다.
getattr()
으로 특정 object 의 attribute 값을 가져올 수 있다.
hasattr()
으로 특정 object 에 특정 attribute 값이 있는지 없는지 True, False 값으로 리턴한다.
In [4]: getattr(SomeObject, 'user')
Out[4]: 'I am a user attribute'
In [5]: hasattr(SomeObject, 'user')
Out[5]: True
In [6]: setattr(SomeObject, 'user_id', 100)
In [7]: getattr(SomeObject, 'user_id')
Out[7]: 100