类的继承
面向对象编程(oop)语言的一个主要功能就是"继承"。继承是指这样一种能力:它可以使用现在有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为"子类"或"派生类"。
被继承的类成为"基类"、"父类"或"超类"。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过"继承(Inheritance)和"组合"(Composition)来实现。
在某些OOP语言中,一个子类可以继承多个基类。三十一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式主要有2类:实现继承、接口继承。
©实现继承是指使用基类的属性和方法而无需额外编码的能力;
©接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力(子类重构父类方法);
抽象类仅定义将由子类创建的一般属性和方法。
OO开发范式大致为:划分对象-抽象类-将类组织成为层次化结构(继承和合成)-用类与实例进行设计和实现几个阶段。
简单的例子:
1 class dog(object): 2 def __init__(self, name, age, color): 3 self.name = name 4 self.age = age 5 self.color = color 6 7 def normal(self): 8 print("这是一只%s的狗,今年%s岁了,叫%s" % (self.color, self.age, self.name)) 9 10 11 class bigdog(dog): 12 def __init__(self, name, age, color, big): 13 dog.__init__(self, name, age, color) 14 self.big = big 15 16 def sep(self): 17 print("这个品种的狗狗体型特别大!!!%s" % self.big) 18 19 20 a = dog("猪猪", "2", "白色") 21 b = bigdog("猪猪", "2", "白色", "非常巨大的贵宾犬") 22 a.normal() 23 b.sep()
最典型的例子:
1 class F1(object): 2 def __init__(self): 3 print("----") 4 5 def a1(self): 6 print("F1_A1") 7 8 def a2(self): 9 print("F1_A2") 10 11 12 class F2(F1): 13 def __init__(self): 14 print("") 15 16 def a1(self): # 4 F3在父类F2找到a1,开始执行。 17 self.a2() # 5 self这里变为F3.a2,运行F3.a2,回到F3子类 18 print("F2_A1") # 7 最后打印 19 20 def a2(self): 21 print("F2_A2") 22 23 24 class F3(F2): 25 def __init__(self): 26 print("") 27 28 def a2(self): # 6 找到F3.a2,然后打印F3_a2,随后回到父类继续执行F2.a1 29 print("F3_A2") 30 31 32 obj = F3() # 1 33 obj.a1() # 2 F3 = F3.a1,找不到,于是到父类去找
例子二
1 class school(object): 2 """父类的一些基础属性""" 3 mement = 0 #统计教室和同学数量 4 5 def __init__(self, name, age, cla, sex): 6 self.name = name 7 self.age = age 8 self.cla = cla 9 self.sex = sex 10 11 self.pay_fee()#调用后每次运行打印pay_fee类方法展示的内容 12 13 def pay_fee(self): 14 print("开学了%s" % self.name) 15 school.mement += 1 #有一个学生或老师+1 16 17 def __del__(self): 18 school.mement -= 1 19 print("%s退学啦" % (self.name)) 20 21 def tell(self): 22 """各个子类信息内容不同,需要变为字典,然后遍历字典里面的内容""" 23 print("\t","----info----%s" % self.name) 24 for k,v in self.__dict__.items(): 25 print("\t",k,v) 26 print("\t","---------------") 27 28 class student(school): 29 """学生""" 30 def __init__(self, name, age, cla, sex, score, fee): 31 school.__init__(self, name, age, cla, sex) 32 self.score = score 33 self.fee = fee 34 35 def clss(self): 36 print("%s同学今年%s岁,%s,是个%s,入学考试%s分,交了%s元" % (self.name, self.age, self.cla, self.sex, self.score, self.fee)) 37 38 39 class teacher(school): 40 """教师""" 41 def __init__(self, name, age, cla, sex, course, grade): 42 school.__init__(self, name, age, cla, sex) 43 self.course = course 44 self.grade = grade 45 46 def teaching(self): 47 print("%s老师今年%s岁,%s,是个%s,科目%s,等级%s" % (self.name, self.age, self.cla, self.sex, self.course, self.grade)) 48 49 50 t1 = student("李雷", "18", "四年级一班", "男孩", "300", "140000") 51 t2 = teacher("彪狗", "66", "四年级一班", "人妖", "语文", "低水平") 52 53 t1.tell()