# 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()