Python的__str__

str 直接打印对象的实现方法
————————————————————————————————————————————————————
在python语言里,str一般是格式是这样的。
class A:
def str(self):
return “this is in str”
事实上,str是被print函数调用的,一般都是return一个什么东西。这个东西应该是以字符串的形式表现的。如果不是要用str()函数转换。当你打印一个类的时候,那么print首先调用的就是类里面的定义的str,比如:str.py

#!/usr/bin/env python

class strtest:
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

$./str.py
init: this is only test
str: this is only test
从上面例子可以看出,当打印strtest的一个实例st的时候,str函数被调用到。
其实,python里面的对象基本上都默认有个str供print函数所用。比如字典里的str,见红色部分:

dir({})
[‘class‘, ‘cmp‘, ‘contains‘, ‘delattr‘, ‘delitem‘, ‘doc‘, ‘eq‘, ‘format‘, ‘ge‘, ‘getattribute‘, ‘getitem‘, ‘gt‘, ‘hash‘, ‘init‘, ‘iter‘, ‘le‘, ‘len‘, ‘lt‘, ‘ne‘, ‘new‘, ‘reduce‘, ‘reduce_ex‘, ‘repr‘, ‘setattr‘, ‘setitem‘, ‘sizeof‘, ‘str‘, ‘subclasshook‘, ‘clear’, ‘copy’, ‘fromkeys’, ‘get’, ‘has_key’, ‘items’, ‘iteritems’, ‘iterkeys’, ‘itervalues’, ‘keys’, ‘pop’, ‘popitem’, ‘setdefault’, ‘update’, ‘values’]
t={}
t[‘1’] = “hello”
t[‘2’] = “world”
t #等于 print t
{‘1’: ‘hello’, ‘2’: ‘world’}
t.str()
“{‘1’: ‘hello’, ‘2’: ‘world’}”
大家可以看到一个字典,print t 和 t.str()是一样的。只不过str()将字典内容以字符串形式输出。
看看下面的例子,如果在函数str里返回的不是字符串,请看str1.py

#!/us/bin/env/python

#metaclass = type

#if name == “main“:
class strtest:
def init(self):
self.val = 1
def str(self):
return self.val

if name == “main“:
st=strtest()
print st

$./str1.py
Traceback (most recent call last):
File “./str.py”, line 12, in
print st
TypeError: str returned non-string (type int)
错误的信息提示:str返回了一个非字符串。这时候我们应该这样做:请看str2.py

#!/usr/bin/env python

#metaclass = type

#if name == “main“:
class strtest:
def init(self):
self.val = 1
def str(self):
return str(self.val)

if name == “main“:
st=strtest()
print st

$./str2.py
1
我们用str()将整型变为了字符型。

http://blog.csdn.net/followingturing/article/details/7954204

文章目录