__repr__, __dict__

|

Obeject의 속성값을 알고싶은데…

Obeject의 속성값을 알고싶은데 print()로 찍어보면 <__main__.OrigClass object at 0x10bedd0b8>이런 식으로만 나온다.

이럴 경우, __repr__을 통해 알 수 있도록 만들 수 있다.

물론 __repr__eval함수에 넘겼을 때, 정확히 똑같은 object가 만들어지는 string representation을 만들도록 권장한다. __dict__함수를 사용해서 속성을 볼 수도 있다!

코드

class OrigClass(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y


class RepresentativeClass(OrigClass):
    def __repr__(self):
        return "RepresentativeClass({}, {})".format(self.x, self.y)

if __name__ == '__main__':
    o = OrigClass(10, 20)
    r = RepresentativeClass(10, 20)
    
    print(o)  # 그냥 돌리니까 메모리 주소만 나오겠지...
    print(r)  # 요 경우 RepresentativeClass(10, 20)가 나오겠다..
    r2 = eval(repr(r))  # 이걸 다시 eval에 넘기면
    print(r2)  # 같은 attr을 갖는 객체를 만들 수 있다!
    print(o.__dict__)  # 속성값만 알고싶을 때..

결과값

<__main__.OrigClass object at 0x106f1e0b8>
RepresentativeClass(10, 20)
RepresentativeClass(10, 20)
{'y': 20, 'x': 10}