类继承与重写

# is a base class 父类、基类
# Exception
'''
继承:
Student,Employee,Doctor ---> 都属于人类
相同代码-----> 代码冗余,可读性不高

将相同代码提取 ------>Person 类

class Student(Person):
pass
特点:
1.如果类中不定义__init__,调用父类 super class的 __init__
2.如果类继承父类也需要定义自己的__init__,就需要在当前类的 __init__调用一下父类__init__
3.如何调用父类__init__:
super().__init__(参数)
super(类名,对象).__init__(参数)
4.如果父类有eat(),子类也定义一个eat方法,默认搜索的原则:先找当前类,再去找父类
s.eat()
override: 重写(覆盖)
父类提供的方法不能满足子类的需求,就需要在子类中定义一个同名的方法,这种行为:重写
5.子类的方法中也可以调用父类的方法:
super().方法名(参数)
'''
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def eat(self):
        print('{}正在吃饭.'.format(self.name))

    def run(self):
        print('{}正在跑步.'.format(self.name))


class Student(Person):
    def __init__(self, name, age, clazz):
        # 如何调用父类的__init__
        super().__init__(name, age)
        self.clazz = clazz

    def study(self, course):
        print('{}正在学习{}课程.'.format(self.name, course))

    # 定义与父类同名的方法.
    def eat(self, food):
        print('{}正在吃{}'.format(self.name, food))


class Empolyee(Person):
    def __init__(self, name, age, salary, manager):
        # 调用父类的另一种写法
        super(Empolyee, self).__init__(name, age)
        self.salary = salary
        self.manager = manager


class Doctor(Person):
    def __init__(self, name, age, patients):
        super().__init__(name, age)
        self.patients = patients


s = Student('jack', 18, 'python1905')
s.run()
s.study('python base')
s.eat('狮子头盖饭')
e = Empolyee('tom', 21, 3000, 'king')
e.run()
e.eat()
lists = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
d = Doctor('lucy', 28, lists)
d.run()
d.eat()

 

posted @ 2021-07-26 22:16  游走在六环  阅读(75)  评论(0)    收藏  举报