__str__是被print函数调用的,一般都是return一个什么东西。这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换。当你打印一个类的时候,那么print首先调用的就是类里面的定义的__str__
class Person(object):
def __init__(self, name, job = None, pay = 0):
self.name = name
self.job = job
self.pay = pay def lastName(self):
return self.name.split()[-1] def giveRaise(self, percent):
self.pay = int(self.pay * (1 + percent)) def __str__(self):
return "[Person: %s, %s]" % (self.name, self.pay) class Manager(Person):
def giveRaise(self, percent, bonus = 0.10):
Person.giveRaise(self, percent + bonus) if __name__ == '__main__':
bob = Person('Bob Smith')
sue = Person('Sue Jones', job = 'dev', pay = 100000)
tom = Manager('Tom Jones', 'mgr', 50000) for object in (bob, sue, tom):
object.giveRaise(0.10)
print object
在看几个简单的例子:
class strTest(object):
def __init__(self):
print "init: this is only test" def __str__(self):
return "str: this is only test" if __name__ == '__main__':
st = strTest()
print st
运行结果:
init: this is only test
str: this is only test
可以看出,当打印 strTest 的一个实例 st 的时候, __str__ 函数被调用到了。
python 中的对象基本都默认有 __str__ 函数,供 print 函数调用。
再看例子,如果在函数 __str__ 里返回的不是字符串:
class strTest(object):
def __init__(self):
self.val = 1 def __str__(self):
return self.val if __name__ == '__main__':
st = strTest() print st
运行结果:
>>>
Traceback (most recent call last):
File "<模块1>", line 11, in <module>
TypeError: __str__ returned non-string (type int)
错误信息提示:__str__ 返回了一个非字符串。
修改上述例子:
class strTest(object):
def __init__(self):
self.val = 1 def __str__(self):
return str(self.val) if __name__ == '__main__':
st = strTest()
print st
运行结果:
>>>
1
用 str()将整型转换城字符串