zoukankan      html  css  js  c++  java
  • 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 列表就是一个简单的所有基类的线性顺序表
  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/master-song/p/8796559.html
Copyright © 2011-2022 走看看