__str__

__str__是被print函数调用的,一般都是return一个什么东西。这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换。当你打印一个类的时候,那么print首先调用的就是类里面的定义的__str__

 1 class Person(object):
 2     def __init__(self, name, job = None, pay = 0):
 3         self.name = name
 4         self.job = job
 5         self.pay = pay
 6 
 7     def lastName(self):
 8         return self.name.split()[-1]
 9 
10     def giveRaise(self, percent):
11         self.pay = int(self.pay * (1 + percent))
12 
13     def __str__(self):
14         return "[Person: %s, %s]" % (self.name, self.pay)
15 
16 
17 class Manager(Person):
18     def giveRaise(self, percent, bonus = 0.10):
19         Person.giveRaise(self, percent + bonus)
20 
21 
22 if __name__ == '__main__':
23     bob = Person('Bob Smith')
24     sue = Person('Sue Jones', job = 'dev', pay = 100000)
25     tom = Manager('Tom Jones', 'mgr', 50000)
26 
27     for object in (bob, sue, tom):
28         object.giveRaise(0.10)
29         print object

 

 在看几个简单的例子:

 1 class strTest(object):
 2     def __init__(self):
 3         print "init: this is only test"
 4 
 5     def __str__(self):
 6         return "str: this is only test"
 7 
 8 if __name__ == '__main__':
 9     st = strTest()
10     print st

运行结果:
init: this is only test
str: this is only test

可以看出,当打印 strTest 的一个实例 st 的时候, __str__ 函数被调用到了。

python 中的对象基本都默认有 __str__ 函数,供 print 函数调用。

 

再看例子,如果在函数 __str__ 里返回的不是字符串:

 1 class strTest(object):
 2     def __init__(self):
 3         self.val = 1
 4 
 5     def __str__(self):
 6         return self.val
 7 
 8 if __name__ == '__main__':
 9     st = strTest()

10     print st

运行结果:
>>>
Traceback (most recent call last):
  File "<模块1>", line 11, in <module>
TypeError: __str__ returned non-string (type int)

错误信息提示:__str__ 返回了一个非字符串。

 

修改上述例子:

 1 class strTest(object):
 2     def __init__(self):
 3         self.val = 1
 4 
 5     def __str__(self):
 6         return str(self.val)
 7 
 8 if __name__ == '__main__':
 9     st = strTest()
10     print st

运行结果:
>>>
1

用 str()将整型转换城字符串

 

 

 

 

 

posted @ 2013-07-31 23:09  Roger|  阅读(467)  评论(0编辑  收藏  举报