python------面向对象介绍之经典类与新式类的继承顺序

一. 经典类与新式类的继承顺序

1 class A:
 2     def   __init__(self):
 3         print("A")
 4
 5 class B(A):
 6     def __init__(self):
 7         print("B")
 8
 9 class C(A):
10     def __init__(self):
11         print("C")
12
13 class D(B,C):
14     pass
15
16 obj = D()

注:python2.x 经典类是按深度优先来继承的,新式类是按广度优先来继承的;

python3.x  经典类和新式类都是按广度优先继承的。

二. 继承实例

 1 """继承实例"""
 2 class School(object):
 3     def __init__(self,name,addr):
 4         self.name = name
 5         self.addr = addr
 6         self.students = []
 7         self.staffs = []
 8
 9     def enroll(self,stu_obj):
10         print("为学员%s 办理注册手续"% stu_obj)
11         self.students.append(stu_obj)
12     def hire(self,staff_obj):
13         print("雇佣新员工 %s" % staff_obj)
14         self.staffs.append(staff_obj)
15
16
17
18
19 class SchoolMember(object):
20     def __init__(self,name,age,sex):
21         self.name = name
22         self.age = age
23         self.sex = sex
24     def tell(self):
25         pass
26
27 class Teacher(SchoolMember):
28     def __init__(self,name,age,sex,salary,course):
29         super(Teacher,self).__init__(name,age,sex)
30         self.salary = salary
31         self.course = course
32     def tell(self):
33         print(‘‘‘
34         ------info of Teacher : %s----
35         Name :%s
36         Age :%s
37         Sex :%s
38         Salary :%s
39         Course :%s
40         ‘‘‘%(self.name,self.name,self.age,self.sex,self.salary,self.course))
41
42     def teach(self):
43         print("%s is teaching course[%s]" %(self.name,self.course))
44
45 class Student(SchoolMember):
46     def __init__(self,name,age,sex,stu_id,grade):
47         super(Student,self).__init__(name,age,sex)
48         self.stu_id = stu_id
49         self.grade = grade
50     def tell(self):
51         print(‘‘‘
52                 ------info of Student : %s----
53                 Name :%s
54                 Age :%s
55                 Sex :%s
56                 Stu_id :%s
57                 Grade :%s
58                 ‘‘‘ % (self.name, self.name, self.age, self.sex, self.stu_id, self.grade))
59     def pay_tuition(self,amount):
60         print("%s has paid tution for $%s" %(self.name,amount))
61
62 school = School("天字一号","外太空")
63
64 t1 = Teacher("xiaolaizi",20,"m",20000,"english")
65 t2 = Teacher("zhangsan",18,"m",200,"chinese")
66
67 s1 = Student("lisi",10,"f",110119,"python")
68 s2 = Student("wangmaiz",8,"f",110118,"C++")
69
70 t1.tell()
71 s1.tell()
72 school.hire(t1)
73 school.enroll(s1)
74
75 print(school.students)
76 print(school.staffs)
77 school.staffs[0].teach()
78
79 for stu in school.students:
80     stu.pay_tuition(3000)

原文地址:https://www.cnblogs.com/bltstop/p/9716001.html

时间: 2024-10-03 09:02:56

python------面向对象介绍之经典类与新式类的继承顺序的相关文章

【python】-- 类的多继承、经典类、新式类

继承知识点补充 在python还支持多继承,但是一般我们很少用,有些语言干脆就不支持多继承,有多继承,就会带来两个概念,经典类和新式类. 一.多继承 之前我们都是讲的单继承,那么什么是多继承呢?说白了,就是:子类可以继承多个父类,就叫多继承. class SchoolMember(object): #SchoolMember类 '''学校成员基类''' def tell(self): print("the schoolmeber is tell...") class School(ob

Python自学之乐-python 2、python 3中经典类、新式类的深度和广度优先小结

#Author:clarkclass Original(object):#在python 3 中写上object的新式类和不写的经典类遵循的都是广度优先原则 def __init__(self): print("in Original")class Second(Original): pass # def __init__(self): # print("in the second")class Third(Original): def __init__(self)

python中的__new__与__init__,新式类和经典类(2.x)

在python2.x中,从object继承得来的类称为新式类(如class A(object))不从object继承得来的类称为经典类(如class A()) 新式类跟经典类的差别主要是以下几点: 1. 新式类对象可以直接通过__class__属性获取自身类型:type 2. 继承搜索的顺序发生了改变,经典类多继承时属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧(即深度优先搜索);新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动 例子: 经典类: 搜索顺序是(D,B,A,C)>>&

python基础学习日志day6-类的经典类vs新式类

经典类VS新式类区别 1)写法新式类class Person(object):#new style 经典类class Persion: #classical style 2)调用父类 新式写法用super 经典类直接写父类类名 3)多继承时继承顺序python3使用的是广度查询,所以两个都一样. 经典类python2是深度查询.所以经典类python2多继承是有BUG class D(B,C) D-->B-->A--C # -*- coding:utf-8 -*- __author__ = '

二十五.面向对象(经典类和新式类)

经典类和新式类 class A(object): pass class B(A): pass class C(B): pass class D(object): pass class E(D,C): pass class F(object): pass class G(F): pass class H(C,G): pass class Foo(E,H): pass # a1=Foo() print(Foo.__mro__) # (<class '__main__.Foo'>, <clas

经典类与新式类的继承顺序

经典类与新式类的继承顺序--两种不同的继承策略. 构造函数(初始化)__init__(self): 的继承策略,就是找哪个__init__(self)的问题 当实例本身有__init__(self) 的时候,会先执行自己的)__init__(self) 函数. 当实例本身没有__init__(self)的时候,它会去找父类中的)__init__(self)函数,此时有2种 继承策略,一种是深度优先,一种是广度优先. 我们看上面的图,先放两句概念上来吓唬吓唬你: 当类是经典类时,多继承情况下,会按

继承1.继承,2.属性查找顺序3.子类访问父类内容4.补充,经典类与新式类 --------- # 21

继承: 1.继承 1.1继承 1 '''''' 2 """ 3 1.什么是继承? 4 继承是描述两个对象之间,什么是什么的关系 5 6 案例:麦兜,佩奇,猪刚鬓 -- 都是猪 7 8 在程序中,继承描述的是类和类之间的关系 9 10 例如:a 继承 b,a就能直接使用b已经存在的方法或属性 11 此时,a称之为子类,b被称之为父类,也称为基类 12 13 2.为什么要使用继承? 14 继承的一方制剂使用另一方已经有的东西 15 其目的是:提高重用性(重用已有的代码) 16 1

重写父类的方法及经典类和新式类的区别

1.父类重写的实例展示 (继承才有父类) # coding=utf-8 class Zll(): # def smile(self): #      print('哈哈哈') #      return 'aa' pass class Dcg(): def smile(self): print('啊啊啊啊啊') class Lw(): def smile(self): print('嘿嘿嘿') class Xz(Zll,Dcg,Lw):   #继承多个父类依次找父类是否有该方法,有就调用. de

经典类和新式类的区别,c3算法

一  经典类和新式类的区别 1, 只有py2中有经典类, 2.2版本以后新增了新式类.  怎样区分,新式类后面必须继承object py3 中只有新式类.写不写继承,都是默认继承object 2,  查找顺序不一样, 经典类-深度优先,就是一条道走到黑 新式类 -广度优先(这样说不太精准),通过c3算法,找出顺序 二,c3 算法 class A(object): pass class B(A): pass class C(B): pass class D(object): pass class