zoukankan      html  css  js  c++  java
  • 定制类

    看到类似__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__
  • 相关阅读:
    细说java中Map的两种迭代方式
    Greenplum query Oracle via DLINK
    去除高清视频锯齿几个方法
    c语言基础学习09_关于复合类型的复习
    c语言基础学习09_复合类型
    原码、反码、补码 详解
    Win10系统怎样让图片的打开方式为照片查看器?
    Android内存泄漏分析实战
    grid control 11.1.0.1 安装指南
    Web中树形数据(层级关系数据)的实现—以行政区树为例
  • 原文地址:https://www.cnblogs.com/singeldiego/p/4905825.html
Copyright © 2011-2022 走看看