• 函数的重写


    函数的重写

    前提:在具有继承关系的类中

    作用:将父类中已有的函数在子类中进行重新的实现【声明部分一样的,实现部分不一样】

    1.系统函数的重写

    注意:并不是所有的函数都需要重写

    __str__

    __repr__

    代码如下:

    class Person(object):
        def __init__(self,name,age,height,score):
            self.name = name
            self.age = age
            self.height = height
            self.score = score
    
        #3.__str__的重写:返回一个对象信息的字符串
        def __str__(self):
            return "name=%s age=%d height=%f score=%d" % (self.name,self.age,self.height,self.score)
    
        """
        def __repr__(self):
            return "hello"
        """
        #4.str和repr都和对象有关,让二者的实现返回相同的结果, __repr__ =  __str__可以省略
        __repr__ =  __str__
        #等价于下面的写法:
        """
        def __repr__(self):
            return "name=%s age=%d height=%f score=%d" % (self.name,self.age,self.height,self.score)
        """
    
    p1 = Person("abc",19,17,37)
    print(p1.name,p1.score,p1.age,p1.height)
    #1.如果直接打印对象,获取的是对象的地址
    print(p1)   #<__main__.Person object at 0x000001C7E4190DD8>
    
    p2 = Person("abc",19,17,37)
    print(p2.name,p2.score,p2.age,p2.height)
    
    #2.函数的重写:
    # __str__:返回一个字符串,但是,如果没有重写该函数,默认返回该对象的地址
    #当重写了__str__之后,直接使用对象,则返回的是str函数中的返回值
    #print(p1.__str__())
    
    
    """
    总结:
        a.当str和repr都未被重写的时候,使用对象,调用的是str,此时的str返回的是对象的地址
        b.当str和repr都被重写之后,使用对象,调用的是str,返回的是指定的字符串
        c.当没有重写str,但是,重写repr,使用对象,调用的是repr,返回的是指定的字符串
        d.当只重写了str,调用是str
    """
    
    #优点或者使用场景:当一个对象的属性很多,并且都需要通过打印来查看相应的值,就可以重写str函数,简化代码
    p3 = Person("abc",19,17,37)
    print(p3)

    2.自定义函数的重写

    函数重写的时机:当父类中的函数的功能不满足子类的的需求时,就需要重写

    注意:并不是所有的子类都需要重写父类中的函数

    重写的规则;子类中出现和父类中重名的函数,则子类中的会覆盖掉父类中

    代码演示:

    #父类
    class Animal(object):
        def __init__(self,name):
            self.name = name
    
        def show(self):
            print("父类~~show")
    
    #子类
    class Dog(Animal):
        def __init__(self,name):
            super().__init__(name)
    
    class Cat(Animal):
        def __init__(self,name):
            super().__init__(name)
    
    class Tiger(Animal):
        def __init__(self,name):
            super().__init__(name)
    
        #重写父类中的函数
        #声明相同,实现不同的
        def show(self,num):
            #调用父类中的函数
            super().show()
    
            print("子类~~~show")
    
    d = Dog("fah")
    d.show()
    
    t = Tiger("abc")
    t.show(3)
    #函数名就是一个变量名,重写函数的过程其实就是变量的指向发声改变的过程
    #不管子类中的函数有没有参数,和父类的参数列表相不相同,不影响重写,只看函数名
    #t.show()
  • 相关阅读:
    梯度下降(Gradient Descent)
    Positioning-Based Photo Retrieval
    NTU Long-Term Positioning Dataset
    Pycharm导入tabula模块包
    MySQL学习笔记20
    MySQL学习笔记17-19
    Android studio 报错AAPT2 error
    MySQL学习笔记13-16
    MySQL学习笔记 8-12
    机器学习十大算法
  • 原文地址:https://www.cnblogs.com/allwell/p/10000466.html
Copyright © 2020-2023  润新知