继承可以分为但继承,多继承。

 继承的基本形式
class ParentClass1(object): #定义父类
pass class ParentClass2: #定义父类
pass class SubClass1(ParentClass1): #单继承,基类是ParentClass1,派生类是SubClass
pass class SubClass2(ParentClass1,ParentClass2): #python支持多继承,用逗号分隔开多个继承的类
pass print(SubClass1.__bases__) #显示他继承了几类
print(SubClass2.__bases__)
print(ParentClass1.__bases__)

经典类和新式类:

两者区别在python3中是没有区别的,都有有个继承,如果没定义继承,也会默认将object继承,都叫新式类。

两者的区别在python2才有区别,没有定义就是经典类,如果定义了继承就是新式类。

 class Animal:
x=1
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
# print('Animal.__init__')
def eat(self):
print('%s eat' %self.name) def talk(self):
print('%s say' %self.name) class People(Animal):
x=10
def __init__(self,name,age,sex,education):
Animal.__init__(self,name,age,sex)
self.education=education
# print('People.__init__') def talk(self):
Animal.talk(self)
print('这是人在说话') class Dog(Animal):
pass
class Pig(Animal):
pass peo1=People('alex',18,'male','小学肄业')
print(peo1.__dict__)
peo1.talk()
print(peo1.x) dog1=Dog('yuanhao',28,'male')
pig1=Pig('wupeiqi',18,'male') print(peo1.name)
print(dog1.name)
print(pig1.name)

类的继承:

 class OldboyPeople:
school = 'oldboy'
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex def eat(self):
print('is eating') class OldboyStudent(OldboyPeople):
def learn(self):
print('%s is learning' %self.name) class OldboyTeacher(OldboyPeople):
def __init__(self,name,age,sex,salary,title):
OldboyPeople.__init__(self,name,age,sex)
self.salary=salary
self.title=title def teach(self):
print('%s is teaching' %self.name) yl_obj=OldboyStudent('yanglei',28,'female')
egon_obj=OldboyTeacher('egon',18,'male',3.1,'沙河霸道金牌讲师')

总结;

1,继承功能之一:解决类与类之间代码重复

2,继承是类与类之间的关系,是一种,什么是什么的关系

3,在子类派生出新的属性,以自己的为准。

4,在子类派生出新的方法内重用弗雷的功能的方式:指名道姓

eg:OldboyPeople.__init__

  这种调用方法本身跟继承没有关系

继承实现的原理:

调用顺序:

单继承的话:如果执行的话先找自己的范围内,当没有的时候再去找父类。(就是不管怎么找,都是先从自身找齐)

 #单继承
class A:
def f1(self):
print('A.f1') def f2(self):
print('A.f2')
self.f1() #b.f1() class B(A):
def f1(self):
print('B.f2') b=B()
# b.f2=111111
b.f2()

多继承的话:

 #多继承
class J:
def test(self):
print('J')
class A(J):
# def test(self):
# print('A')
pass
class E(J):
def test(self):
print('E')
pass
class H(J):
def test(self):
print('H') class G(H):
def test(self):
print('G')
pass
class B(A):
# def test(self):
# print('B')
pass
class D(E):
def test(self):
print('D')
pass
class F(G):
def test(self):
print('F')
pass
class C(B,D,F):
# def test(self):
# print('C')
pass c=C()
# c.test=1111
c.test()

#可以利用*.mro()来查看他的调用顺序

eg: print(c.mro())

最新文章

  1. 一份关于Swift语言学习资源的整理文件
  2. Prestashop 页面空白
  3. air手势代码
  4. c++中智能输出文件
  5. ERROR 1227 (42000): Access denied; you need (at least one of) the PROCESS privilege(s) for this oper
  6. [swustoj 404] 最小代价树
  7. Linq to Sql自动生成实体类重名情况的处理
  8. PL/SQL 游标的使用
  9. innerHTML使用方法
  10. httpd2.2配置文件详解
  11. redis主从复制入门案例
  12. 清橙A1202&Bzoj2201:彩色圆环
  13. UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】
  14. fuzzing学习
  15. Notepad++的实用技巧
  16. Oracle创建表空间、用户管理、角色管理
  17. db2 merge update
  18. java使用代理请求https
  19. 11.12git部分和redis
  20. 4星|《门口的野蛮人2》:美国宝万之争专业户KKR公司的疯狂借债收购史

热门文章

  1. 美国康奈尔大学BioNB441元胞自动机MATLAB应用
  2. 深入浅出EF之ModelFirst和DBFirst
  3. JSP实现界面的自动跳转的几种方式
  4. Gradle 1.12 翻译——第九章 Groovy快速入门
  5. Touch Handling in Cocos2D 3.x(六)
  6. Touch Handling in Cocos2D 3.x(一)
  7. 迭代器模式之看芒果台还是央视nie?
  8. MPLSVPN 命令集
  9. UML之概述
  10. C语言中数组转化为字符串的方法