python学习笔记(25)-继承

#继承
class RobotOne: #第一代机器人
    def __init__(self,year,name):
        self.year=year
        self.name=name
    def walking_on_ground(self):
        print(self.name+'只能在平地上行走,有障碍物就会摔的')
    def robot_info(self):
        print("{0}年产生的机器人{1},是中国研发的".format(self.year,self.name))

# 为了多继承写的第二代机器人
# class RobotTwo(RobotOne): #第二代机器人,继承了第一代了类
#
#     def walking_on_ground(self):  #子类里面的函数名和父类函数名重复的时候,就叫重写
#         print(self.name+'可以在平地上行走')
#
#     def walking_avoid_block(self):  #父类没有,子类有,叫拓展
#         #想在子类的函数里面调用父类的一个函数
#         self.robot_info()
#         print(self.name+"可以避开障碍物")

# class RobotTwo: #第二代机器人,
#     def __init__(self,year,name):
#         self.year=year
#
#     def walking_on_ground(self):  #子类里面的函数名和父类函数名重复的时候,就叫重写
#         print(self.name+'可以在平地上行走')
#
#     def walking_avoid_block(self):  #父类没有,子类有,叫拓展
#         #想在子类的函数里面调用父类的一个函数
#         self.robot_info()
#         print(self.name+"可以避开障碍物")

#为了超继承写的第二代机器人
class RobotTwo(RobotOne): #第二代机器人,

    def walking_on_ground(self):  #子类里面的函数名和父类函数名重复的时候,就叫重写
        super(RobotTwo,self).walking_on_ground()  #超继承,会继承父类的该方法
        print(self.name+'可以在平地上行走')


r= RobotTwo("1990","小王")
r.robot_info()
r.walking_on_ground()
#r.walking_avoid_block()
#继承的类 是否要用到初始化函数 请看是否从父类继承了。
#父类有的,继承后,可以直接拿过来用
#父类有的,子类也有重名的函数,那么子类的实例就优先调用子类的函数

#面试的时候的继承:多继承和超继承

#第三代机器人,多继承
# class RobotThree(RobotOne,RobotTwo): #第三代机器人,继承了第一代和第二代的了类
#     def jump(self):
#         print(self.name+"单膝跳跃")
#
# r3=RobotThree("2000","大王")
# r3.jump()
# r3.walking_on_ground()  #会摔倒,RobotOne在前,RobotTwo在后
#
# r3=RobotThree("大王")
# r3.walking_on_ground()  #不会摔倒,RobotTwo在前,RobotOne在后

#具有两个父类的属性和方法,如果两个父类具有同名方法的时候,就近原则。
#多继承的时候,继承的类的初始化值不一致问题???
#子类调用函数就近原则,初始化函数也包括在内。

#超继承
#改写父类的方法,同时还要使用父类的方法,使用超继承。
#super关键字会顺着子类的名字去找到父类的方法,调用父类里面的重名方法
原文地址:https://www.cnblogs.com/wuzm/p/11977580.html