• python之类与对象(一)


    1.改变对象的字符串显示,要改变一个实例的字符串表示,可重新定义它的 str () 和 repr () 方法

    class Pair:
        def __init__(self, x, y):
            self.x = x
            self.y = y
    '''repr () 方法返回一个实例的代码表示形式,通常用来重新构造这个实例。内置的 repr() 函数返回这个字符串,跟我们使用交互式解释器显示的值是一样的。
    str () 方法将实例转换为一个字符串,使用 str() 或 print() 函数会输出这个字符串。'''
        def __repr__(self):
            return 'Pair({0.x!r},{0.y!r})'.format(self)#格式化代码 {0.x} 对应的是第 1 个参数的 x 属性
        def __str__(self):
            return '({0.x!r},{0.y!r})'.format(self)
    
    p = Pair(3,4)
    print(p) #默认输出str定义的内容
    print('{!r}'.format(p))
    print('{}'.format(p))
    
    
    #如果 str () 没有被定义,那么就会使用 repr () 来代替输出

    2.自定义字符串的格式化,我们需要在类上面定义 format () 方法

    _format = {
        'ymd': '{d.year}-{d.month}-{d.day}',
        'mdy': '{d.month}/{d.day}/{d.year}',
        'dmy': '{d.day}/{d.month}/{d.year}'
    }
    class Date:
        def __init__(self,year,month,day):
            self.year = year
            self.month = month
            self.day = day
    
        def __format__(self, code):
            if code == '':
                code='ymd'
            fmt =_format[code]
            return fmt.format(d=self)
    
    d = Date(2018,4,11)
    print(format(d)) #2018-4-11
    print(format(d,'mdy'))#4/11/2018
    
    
    from datetime import date
    d = date(2018,4,11)
    print(format(d))#2018-04-11
    print(format(d,'%A %B %Y %m %d'))#Wednesday April 2018 04 11

    3.在类中封装属性名,以单下划线_开头的名字,使用双下划线开始会导致访问名称变成其他形式,这种属性通过继承是无法被覆盖的

    有两种不同的编码约定 (单下划线和双下划线) 来命名私有属性,大多数而言,你应该让你的非公共名称以单下划线开 头。但是,如果代码会涉及到子类,并且有些内部属性应该在子类中隐藏起来,那么才考虑使用双下划线方案。

    4.在子类中调用父类的某个已经被覆盖的方法

    class Base:
        def __init__(self):
        print('Base.__init__')
    class A(Base):
        def __init__(self):
            Base.__init__(self)
            print('A.__init__')

    class Base:
        def __init__(self):
            print('Base.__init__')
    class A(Base):
        def __init__(self):
            super().__init__()
            print('A.__init__')
    class B(Base):
        def __init__(self):
            super().__init__()
            print('B.__init__')
    class C(A,B):
        def __init__(self):
            super().__init__() # Only one call to super() here
            print('C.__init__')
    
    c= C()
    print(c)
    print(C.__mro__)#MRO 列表就是一个简单的所有基类的线性顺序表
  • 相关阅读:
    Winfrom Chart实现数据统计
    Python--面向过程编程
    老板喜欢什么样的员工
    python--装饰器
    python--浅拷贝和深拷贝
    Python基础-logging模块
    Python基础-subprocess模块
    Python基础-hashlib模块
    Python基础-ConfigParser模块
    Python基础-XML模块
  • 原文地址:https://www.cnblogs.com/master-song/p/8796559.html
Copyright © 2020-2023  润新知