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 - __str__ 和 __repr__

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

python: 理解__str__

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

__call__例子

#call.py 一个class被载入的情况下。 class Next:     List = []         def __init__(self,low,high) :   ...

Python中class的内置函数__str__

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

python __len__(self)详解

__len__ 如果一个类表现得像一个list,要获取有多少个元素,就得用 len() 函数。 要让 len() 函数工作正常,类必须提供一个特殊方法__len__(),它返回元素的个数。 例如,...

正则表达式实例

正则表达式实例 1.验证数字: 只能输入1个数字   表达式 ^\d$  描述 匹配一个数字  匹配的例子 0,1,2,3  不匹配的例子  2.只能输入n个数...

Python中__repr__和__str__区别

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

Python 中的lower()、upper()函数和str\chr

今天遇到一点小问题,需要编写一个程序将List 中的无规则英文名按【首字母大写其余部分小写】的方式转换 一开始的思路是编写一个函数将每个名字字符串【str】进行处理,如何用map进行批处理 不得不...

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

碰到一个字符串的strip()用法,网上搜了一圈各种不懂(发现程序员们经常语体教),于是找人问了问。。。。 我在这里总结一下: 假设str是一个字符串 那么str.strip()就是把这...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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