2012-07-08 3 views
0

클래스의 인스턴스를 인쇄 할 때 문자열 값을 반환하려고합니다. 그것은 내가 원하는 것처럼 작동해서는 안된다.클래스 및 __str__ 정보

class oObject (object): 
    def __init__(self, value): 
     self.value = value 
    def __str__(self): 
     return str(self.value) 
    def __repr__(self): 
     return str(self.value) 

new = oObject(50) 
# if I use print it's Okay 
print new 
# But if i try to do something like that ... 
print new + '.kine' 
+0

무엇이 잘못 되었나요? –

+1

'print str (new) + '.kine''을 사용하면, 파이썬은 객체를 연결할 때 객체를 문자열로 강제 변환하지 않습니다. – millimoose

답변

2

재정 __add__ :

class oObject (object): 
    def __init__(self, value): 
     self.value = value 
    def __str__(self): 
     return str(self.value) 
    def __repr__(self): 
     return str(self.value) 
    def __add__(self,val): 
     return str(self.value)+val 

new = oObject(50) 
'''if I use print it's Okay''' 
print new 
'''But if i try to do something like that ...''' 
print new + '.kine' #prints 50.kine 
+1

오히려 잔인 함이 많다고 생각하지 않습니까? 파이썬은 다른 객체를 자동으로 강제 변환하지 않기 때문에 인스턴스에서 명시 적으로'str()'호출을 사용하는 것이 좋습니다. –

+0

@MartijnPieters 예, **하지만 ** 문자열로 변환하려는 경우 ** 암시 적으로 ** 그렇다면 좋습니다. –

+4

명시 적 암시 적보다 낫습니다. –

3

명시 적으로 문자열로 변환 해보십시오 :

print str(new) + '.kine' 

은 또한 당신은 형식 문자열을 사용할 수

print '{}.kine'.format(new) 
2

파이썬은 인쇄하기 전에 문자열로 전체 식의 결과를 변환, 개별 항목이 아닙니다. 합치하기 전에 문자열로 개체 인스턴스를 변환 :

print str(new) + '.kine' 

파이썬은 강력한 형식의 언어이며, '+'기호와 같은 연산자를 사용하는 경우 자동으로 문자열로 항목을 변환하지 않습니다. 그것을 위해

0

.__str__() 정의가 작동하는지 확인 print new을보십시오. print은 내부적으로 호출합니다. 그러나 + 연산자는 문자열에 대한 암시 적 변환을 사용하지 않습니다.

관련 문제