定制类
2015-10-23 22:11
134 查看
看到类似
除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。
打印出一堆<__main__.Student object at 0x109afb190>,不好看。
怎么才能打印得好看呢?只需要定义好
这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。
但是细心的朋友会发现直接敲变量不用
这是因为直接显示变量调用的不是
通常
__slots__这种形如
__xxx__的变量或者函数名就要注意,这些在Python中是有特殊用途的。
__slots__我们已经知道怎么用了,
__len__()方法我们也知道是为了能让class作用于
len()函数。
除此之外,Python的class中还有许多这样有特殊用途的函数,可以帮助我们定制类。
1.__str__ 和 __repr__
我们先定义一个Student类,打印一个实例:
class Student(object): def __init__(self,name): self.name = name >>> print(Student('Michael')) <__main__.Student object at 0x109afb190>
打印出一堆<__main__.Student object at 0x109afb190>,不好看。
怎么才能打印得好看呢?只需要定义好
__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__()是为调试服务的。
class Student(object): def __init__(self,name): self.name = name def __str__(self): return 'Student object (name: %s)' % self.name def __repr__(self): return 'Student object (name: %s)' % self.name >>> s = Student('Michael') >>> s Student object (name: Michael)
通常
__str__()和
__repr__()代码都是一样的,所以,有个偷懒的写法:
class Student(object): def __init__(self,name): self.name = name def __str__(self): return 'Student object (name: %s)' % self.name __repr__ = __str__
相关文章推荐
- Android判断当前的android设备是否处于联网状态
- 微软CodeDom模型学习笔记(全)
- 自己的Linux命令字典
- ViewPager实现循环滑动实现方法+定时自动滑动实现方法详解
- nerdtree与ctags
- mybatis 批量插入oracle与mysql
- 看懂Java类图
- ios深度解析之Swift(枚举,继承,协议,扩展)
- Linux文件和文件夹复制
- 如何看java类图
- 杭电1061--n^n末尾的数
- 添加数据源
- C++_inline函数(内嵌函数)
- Lua贪吃蛇开发笔记2
- <Unity>鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
- Leetcode -- Recover Binary Search Tree
- postgres中文文档
- xdebug浏览器调试参数
- Python数据类型之间的转换
- 读书,还是读数量?