首页 > 其他 > 详细

定制类

时间:2015-10-23 22:57:53      阅读:519      评论:0      收藏:0      [点我收藏+]

看到类似__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)

这样打印出来的实例,不但好看,而且容易看出实例内部重要的数据。

但是细心的朋友会发现直接敲变量不用print,打印出来的实例还是不好看:

>>> 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__

 

定制类

原文:http://www.cnblogs.com/singeldiego/p/4905825.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!