python __str__,__repr__,__call__()
2017-06-15 21:30
459 查看
__str__()和__repr__()
只需要定义好
这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。
但是细心的朋友会发现直接敲变量不用
这是因为直接显示变量调用的不是
解决办法是再定义一个
一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用
任何类,只需要定义一个
调用方式如下:
如果你把对象看成函数,那么函数本身其实也可以在运行期动态创建出来,因为类的实例都是运行期创建出来的,这么一来,我们就模糊了对象和函数的界限。
那么,怎么判断一个变量是对象还是函数呢?其实,更多的时候,我们需要判断一个对象是否能被调用,能被调用的对象就是一个
通过
只需要定义好
__str__()方法,返回一个好看的字符串就可以了:
>>> class Student(object): ... def __init__(self, name): ... self.name = name ... def __str__(self): ... return 'Student object (name: %s)' % self.name ... >>> print(Student('Michael')) Student object (name: Michael)
这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。
但是细心的朋友会发现直接敲变量不用
>>> s = Student('Michael') >>> s <__main__.Student object at 0x109afb310>
这是因为直接显示变量调用的不是
__str__(),而是
__repr__(),两者的区别是
__str__()返回用户看到的字符串,而
__repr__()返回程序开发者看到的字符串,也就是说,
__repr__()是为调试服务的。
解决办法是再定义一个
__repr__()。但是通常
__str__()和
__repr__()代码都是一样的,所以,有个偷懒的写法:
class Student(object): def __init__(self, name): self.name = name def __str__(self): return 'Student object (name=%s)' % self.name __repr__ = __str__
__call__
一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用。能不能直接在实例本身上调用呢?在Python中,答案是肯定的。
任何类,只需要定义一个
__call__()方法,就可以直接对实例进行调用。请看示例:
class Student(object): def __init__(self, name): self.name = name def __call__(self): print('My name is %s.' % self.name)
调用方式如下:
>>> s = Student('Michael') >>> s() # self参数不要传入 My name is Michael.
__call__()还可以定义参数。对实例进行直接调用就好比对一个函数进行调用一样,所以你完全可以把对象看成函数,把函数看成对象,因为这两者之间本来就没啥根本的区别。
如果你把对象看成函数,那么函数本身其实也可以在运行期动态创建出来,因为类的实例都是运行期创建出来的,这么一来,我们就模糊了对象和函数的界限。
那么,怎么判断一个变量是对象还是函数呢?其实,更多的时候,我们需要判断一个对象是否能被调用,能被调用的对象就是一个
Callable对象,比如函数和我们上面定义的带有
__call__()的类实例:
>>> callable(Student()) True >>> callable(max) True >>> callable([1, 2, 3]) False >>> callable(None) False >>> callable('str') False
通过
callable()函数,我们就可以判断一个对象是否是“可调用”对象。
相关文章推荐
- Python str repr len 数学运算符 类型转换 @property __slots__ __call__
- python之repr()和str()的区别
- python中str()和repr()区别
- 【ZZ】python - __str__ 和 __repr__
- Python repr() 或str() 函数
- python - __str__ 和 __repr__
- Python repr() 或str() 函数
- python的str()和repr()的区别
- python的str()和repr()的区别
- 【ZZ】python - __str__ 和 __repr__
- python中str()和repr()区别
- python print str repr pprint
- Python中的str和repr的区别
- Python的str()和repr()
- Python的repr和str有什么不同?
- python str和repr的区别
- python str与repr的区别
- 关于python的str()和repr()函数
- str和repr区别 分类: python学习 2014-06-23 10:05 205人阅读 评论(0) 收藏
- python - __str__ 和 __repr__