类的继承

面向对象编程(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()

 

posted @ 2017-11-10 18:18  橙子味的萝卜  阅读(193)  评论(0编辑  收藏  举报