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中class的内置函数__str__

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

python内置函数__init__及__str__的区别

一、说明: __init__:类实例初始化函数 __str__:类实例字符串化函数 二、 示例1: ? 1 2 3 ...
  • wangzhaotongalex
  • wangzhaotongalex
  • 2015年11月26日 14:14
  • 1135

Python中__repr__和__str__区别

看下面的例子就明白了class Test(object): def __init__(self, value='hello, world!'): self.data = val...
  • luckytanggu
  • luckytanggu
  • 2016年12月14日 23:21
  • 12045

python: 理解__str__

转载自:http://blog.csdn.net/xiaofeng_yan/article/details/6616743 以下是我的理解,如果有错我的地方。请务必告诉我。不胜感激! ...
  • lwnylslwnyls
  • lwnylslwnyls
  • 2013年08月27日 09:58
  • 3303

python str 方法

字符串的方法较多,字符串也是python中最为重要的一个数据类型 1:str --à转换为str 类型 class str(object):     """     str(object='') ->...
  • constant_zyh188
  • constant_zyh188
  • 2016年01月21日 21:40
  • 3886

python: 理解__str__

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

python - __str__ 和 __repr__

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

Python中class的内置函数__str__

Python中class的内置函数__str__ 一、说明: __init__:类实例初始化函数 __str__:类实例字符串化函数 二、 示例1...
  • chenglinhust
  • chenglinhust
  • 2015年05月17日 17:11
  • 1306

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

Python 格式化输出 在进行格式化输出时,%r 与 %s 的区别就好比 repr() 函数处理对象与 str() 函数处理对象的差别。 %s ⇒ str(),比较智能; %r ⇒ repr(),处...
  • lanchunhui
  • lanchunhui
  • 2016年06月07日 21:19
  • 5932

python 类的打印__str__

python,__str__一般是格式是这样的 class A: def __str__(self): return "this is in str" 事实上,__str__是被print函数调用...
  • github_37761578
  • github_37761578
  • 2017年03月11日 15:02
  • 684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python 之 __str__
举报原因:
原因补充:

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