python 之 __str__

转载 2012年09月07日 11:17:00

__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 <module>
    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()将整型变为了字符型。


相关文章推荐

python: 理解__str__

以下是我的理解,如果有错我的地方。请务必告诉我。不胜感激!在python语言里,__str__一般是格式是这样的。class A:def __str__(self):return "this is i...

Python中class的内置函数__str__

在python中,如果我们定义一个class: class Friend(): def __init__(self, name): self.name = name if __name__...
  • r91987
  • r91987
  • 2012年01月23日 14:54
  • 14126

python: 理解__str__

转载自:http://blog.csdn.net/xiaofeng_yan/article/details/6616743 以下是我的理解,如果有错我的地方。请务必告诉我。不胜感激! ...

python内置函数__init__及__str__的区别

一、说明: __init__:类实例初始化函数 __str__:类实例字符串化函数 二、 示例1: ? 1 2 3 ...

Python 格式化输出 —— %r 与 %s 的区别(__repr__ 与 __str__)

Python 格式化输出 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别。 %s ⇒ str(),比较智能; %r ⇒ repr(),处...

Python中__repr__和__str__区别

看下面的例子就明白了class Test(object): def __init__(self, value='hello, world!'): self.data = val...

python - __str__ 和 __repr__

内建函数str()和repr() (representation,表达,表示)或反引号操作符(``)可以方便地以字符串的方式获取对象的内容、类型、数值属性等信息。str()函数得到的字符串可读性好(故...
  • yyt8yyt8
  • yyt8yyt8
  • 2011年12月01日 12:41
  • 28830

C++中的C_str()函数用法

语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须...
  • Nancy_m
  • Nancy_m
  • 2012年05月19日 20:38
  • 34235

Python中str()与__str__、repr()与__repr__、eval()、__unicode__的关系与区别

首先先弄清楚str()与__str__、repr()与__repr__ 的区别,str()与repr()都是python中的内置函数,是直接用来格式化字符串的函数。而__str__与__repr__ ...

python中字符串str的strip()方法

碰到一个字符串的strip()用法,网上搜了一圈各种不懂(发现程序员们经常语体教),于是找人问了问。。。。 我在这里总结一下: 假设str是一个字符串 那么str.strip()就是把这...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 之 __str__
举报原因:
原因补充:

(最多只允许输入30个字)