TIL DAY 20-2 || Python Adding Attributes to Object and How to check those

TK·2021년 3월 12일
0

TIL

목록 보기
29/55

Adding attributes to Object, How it works?

토큰을 검증하는 데코레이터에서 의문이 들었다.
다음 코드를 보자.

브라우저에서 요청을 받아 request 라는 object 가 넘어왔을 때 User object 를 request obejct 에 담아func() 를 넘겨주는 코드이다.

그런데 request.user = user 로 추가했을 때 어떤식으로 attribute 가 object 에 추가되는지 궁금했다.

dir(Object) to check attributes

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

profile
Backend Developer

0개의 댓글