Python学习笔记--类(继承)
面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”,继承的过程,就是从一般到特殊的过程。在某些 OOP 语言中,一个子类可以继承多个基类。但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
先看看下面的继承例子:
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # @Date : 2020-03-09 17:19:00 4 # @Author : Flyinghappy (671474@qq.com) 5 # @Link : https://www.cnblogs.com/flyinghappy/ 6 # @Version : $Id$ 7 8 import os 9 10 class SchoolMember(): 11 '''定义一个学校成员基类''' 12 number = 0 #类属性 13 def __init__(self,name,age,sex): 14 self.name = name 15 self.age = age 16 self.sex = sex 17 self.enroll()#初始化实例的时候调用,即新增一个实例就类属性number+1 18 def enroll(self): 19 '''注册新的成员''' 20 print('enroll a new SchoolMember:',self.name) 21 SchoolMember.number += 1 22 def show(self): 23 print(self.name) 24 for key,value in self.__dict__.items():#内部已经将name,age,sex等属性存储为字典了 25 print(key,value) 26 def __del__(self):#删除实例。 27 print('父类开除',self.name) 28 SchoolMember.number -= 1 29 class Teacher(SchoolMember):#子类--老师 30 def __init__(self, name, age, sex, salary, course): 31 SchoolMember.__init__(self, name, age, sex)#继承了父类的name,age,sex属性 32 self.salary = salary#老师类的新增属性 33 self.course = course#老师类的新增属性 34 def teaching(self):#新增方法 35 print('Teacher [%s] is teaching [%s]' % (self.name, self.course)) 36 def __del__(self):#删除实例。重写了父类del方法 37 print('老师类开除',self.name) 38 SchoolMember.number -= 1 39 40 class Student(SchoolMember):#子类--学生 41 def __init__(self, name, age, sex, course, tuition): 42 SchoolMember.__init__(self, name, age, sex)#继承了父类的name,age,sex属性 43 self.course = course#新增属性 44 self.tuition = tuition#新增属性 45 self.amount = 0#新增属性 46 def pay_tuition(self, amount):#新增方法 47 print('student [%s] has just paied [%s]' % (self.name, amount)) 48 self.amount += amount 49 def __del__(self):#删除实例。重写了父类del方法 50 print('学生类开除',self.name) 51 SchoolMember.number -= 1 52 53 t1 = Teacher('Wusir', 28, 'M', 3000, 'python') 54 t1.show() 55 s1 = Student('haitao', 38, 'M', 'python', 30000) 56 s1.show() 57 s2 = Student('lichuang', 12, 'M', 'python', 11000) 58 print(SchoolMember.number) 59 del s2 60 del s1 61 del t1 62 print(SchoolMember.number)
输出结果:大家可以试试59-61行代码改成只删除一个实例,看看输出结果。其实结果是__del__调用了三次


浙公网安备 33010602011771号