继承
- 继承 - 从已经有的类创建新类的过程
- 提供继承信息的称为父类(超类/基类)
- 得到继承信息的称为子类(派生类/衍生类)
- 通过继承我们可将子类中的重复代码抽取到父类中
- 子类通过继承并复用这些代码来减少重复代码的编写
- 将来如果要维护子类的公共代码,只需要在父类中进行操作即可
练习
1. Teacher类
class Teacher(Person):
def __init__(self, name, age, title):
self._name = name
self._age = age
self._title = title
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
@property
def title(self):
return self._title
@title.setter
def title(self, title):
self._title = title
def teach(self, course):
print('%s%s正在讲授%s' % (self._name, self._title, course))
def watch_tv(self):
if self._age >= 18:
print('%s正在看片!' % self._name)
else:
print('%s只能看熊出没!' % self._name)
def main():
t = Teacher('刘强东', 38, '叫兽')
t.teach('python程序设计!')
t.watch_tv()
if __name__ == '__main__':
main()
2. Student类
class Student(Person):
def __init__(self, name, age, grade):
self._name = name
self._age = age
self._grade = grade
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
@property
def grade(self):
return self._grade
@grade.setter
def grade(self, grade):
self._grade = grade
def study(self, course):
print('%s的%s正在学习%s' % (self._grade, self._name, course))
def watch_av(self):
if self._age >= 18:
print('%s正在看片!' % self._name)
else:
print('%s只能看熊出没!' % self._name)
def main():
stu1 = Student('王思聪', 18, '初三')
stu1.study('数学')
stu1.watch_av()
if __name__ == '__main__':
main()
3. Person(Teacher + Student)类
说明 :重新定义了一个
Person
类,将Teacher
类和Student
类中的公共元素放入Person
类中,避免了相同类型代码的重复使用。
class Person(object):
def __init__(self, name, age):
self._name = name
self._age = age
@property
def name(self):
return self._name
@property
def age(self):
return self._age
@age.setter
def age(self, age):
self._age = age
def watch_av(self):
if self._age >= 18:
print('%s正在看片!' % self._name)
else:
print('%s只能看熊出没!' % self._name)
#老师类
class Teacher(Person):
def __init__(self, name, age, title):
super().__init__(name, age)
self._title = title
@property
def title(self):
return self._title
@title.setter
def title(self, title):
self._title = title
def teach(self, course):
print('%s%s正在讲授%s' % (self._name, self._title, course))
# 学生类
class Student(Person):
def __init__(self, name, age, grade):
super().__init__(name, age)
self._grade = grade
@property
def grade(self):
return self._grade
@grade.setter
def grade(self, grade):
self._grade = grade
def study(self, course):
print('%s的%s正在学习%s!' % (self._grade, self._name, course))
def main():
stu = Student('王思聪', 16, '初三')
stu.study('数学')
stu.watch_av()
t = Teacher('刘强东', 38, '叫兽')
t.teach('python程序设计!')
t.watch_av()
if __name__ == '__main__':
main()