__repr__
κ³Ό eval(repr(obj))
κ΄κ³ μλ²½ μ΄ν΄νκΈ°νμ΄μ¬μ 곡λΆνλ€ λ³΄λ©΄ __repr__
κ³Ό eval(repr(obj))
λΌλ ννμ μμ£Ό λ³΄κ² λ©λλ€.
νΉν Effective Python μμ΄ν
75μμλ μ΄ λ κ°λ
μ κ΄κ³λ₯Ό κ°μ‘°ν©λλ€.
μ΄ κΈμμλ __repr__
μ μν , eval(repr(obj))
μ μλ―Έ, κ·Έλ¦¬κ³ λ κ°λ
μ κ΄κ³λ₯Ό μμΈν μ€λͺ
ν©λλ€.
__repr__
λ 무μμΈκ°?__repr__
μ κ°μ²΄μ β곡μμ μΈβ λ¬Έμμ΄ ννμ λ°ννλ νΉμ λ©μλμ
λλ€.repr(obj)
λλ print(repr(obj))
λ₯Ό νΈμΆνλ©΄ obj.__repr__()
μ΄ μ€νλ©λλ€.class User:
def __init__(self, name, age):
self.name = name
self.age = age
user = User("Suyeon", 27)
print(repr(user)) # <__main__.User object at 0x7f...>
__repr__
μ μ μνμ§ μμΌλ©΄ κΈ°λ³Έ μΆλ ₯μ λ©λͺ¨λ¦¬ μ£Όμλ§ λ³΄μ¬μ€λλ€.__repr__
μ μ¬μ μνλ©΄?class User:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"User({self.name!r}, {self.age!r})"
user = User("Suyeon", 27)
print(repr(user)) # User('Suyeon', 27)
eval(repr(obj))
λ 무μμΈκ°?eval()
μ λ¬Έμμ΄μ νμ΄μ¬ μ½λλ‘ μ€ννκ³ κ·Έ κ²°κ³Όλ₯Ό λ°νν©λλ€.repr(obj)
μ κ²°κ³Όκ° μ ν¨ν νμ΄μ¬ ννμμ΄λ©΄,eval(repr(obj))
μ ν΅ν΄ μλ³Έ κ°μ²΄λ₯Ό μ¬μμ±ν μ μμ΅λλ€.a = "hello"
b = eval(repr(a))
print(b) # hello
assert a == b # β
True
repr(a)
β 'hello'
eval("'hello'")
β λ¬Έμμ΄ "hello"
μμ±__repr__
κ³Ό eval(repr(obj))
μ κ΄κ³__repr__
μ eval(repr(obj)) == obj
λ₯Ό λ§μ‘±ν΄μΌ ν©λλ€.repr(obj)
μ κ²°κ³Όκ° κ°μ²΄λ₯Ό λ€μ λ§λ€ μ μλ νμ΄μ¬ μ½λλΌλ©΄ μ΄μμ μ
λλ€.class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def __repr__(self):
return f"Point({self.x!r}, {self.y!r})"
p1 = Point(2, 3)
p2 = eval(repr(p1))
print(p2) # Point(2, 3)
print(p1.x, p1.y) # 2 3
print(p1.__dict__) # {'x': 2, 'y': 3}
eval(repr(p1))
β μλ‘μ΄ Point κ°μ²΄ μμ±repr
μ΄ λλ²κΉ
κ³Ό κ°μ²΄ μ¬μμ±μ λͺ¨λ μ μ©ν΄μ§.νλͺ© | __repr__ | __str__ |
---|---|---|
λͺ©μ | κ°λ°μ λλ²κΉ μ© | μ¬μ©μ μΉνμ μΆλ ₯ |
νΈμΆ λ°©μ | repr(obj) | str(obj) |
κΆμ₯ ꡬν | eval(repr(obj)) == obj λ§μ‘±νλλ‘ | μ½κΈ° μ’μ λ¬Έμμ΄ |
__repr__
μ μ ꡬννλ©΄ printλ§μΌλ‘ λ΄λΆ μν νμΈ κ°λ₯repr
μ΄ eval
κ³Ό νΈνλλ©΄ ν
μ€νΈ λ° μ§λ ¬νμ μ μ©eval(repr(obj))
μ λ§μ‘±ν νμλ μμ (μ: νμΌ νΈλ€, μμΌ λ± λ³΅μ λΆκ° κ°μ²΄)eval
μ μμ μ½λ μ€ν κ°λ₯ β 보μμ λ§€μ° μν.ast.literal_eval
μ μ¬μ©.__repr__
: κ°μ²΄μ 곡μμ νν(λλ²κΉ
/볡μ λͺ©μ )eval(repr(obj))
: repr(obj)
κ° νμ΄μ¬ μ½λλΌλ©΄ μλ³Έ κ°μ²΄ μ¬μμ± κ°λ₯__repr__
: eval(repr(obj)) == obj
λ§μ‘±