2012-07-08 44 views
0

我尝试在打印我的类的实例时返回字符串值。这似乎不应该像我希望的那样工作。关于class和__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

出了什么问题? – 2012-07-08 13:52:37

+1

使用'print str(new)+'。kine'',当连接它们时,Python不会将对象强制转换为字符串。 – millimoose 2012-07-08 13:54:13

回答

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

相当多的矫枉过正,你不觉得吗? Python不会自动强制其他对象,最好在实例上使用显式的'str()'调用。 – 2012-07-08 13:55:05

+0

@MartijnPieters是的,**但**如果他想将其转换为字符串**隐式**然后它是好的。 – 2012-07-08 13:58:38

+4

显式优于隐式。 – 2012-07-08 13:59:07

3

尽量明确地转换为字符串:

print str(new) + '.kine' 

另外,您可以使用格式字符串:

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

Python的整个表达式的结果转换为字符串打印之前,而不是个别项目。在连接前你的对象实例转换为字符串:

print str(new) + '.kine' 

Python是一种强类型语言,不会转换项目使用运营商,如“+”号时自动字符串。

0

尝试print new看到你.__str__()定义工作。 print在内部调用它。但是,+运算符不使用隐式转换为字符串。