1、除了封装,Python面向对象还有继承这一功能,如下代码,这是简单的继承功能.

class Animal:

    def chi(self):
print(self.name+' 吃')
def he(self):
print(self.name + ' 喝') class Cat:
def __init__(self, name):
self.name = name
def jiao(self):
print('瞄')
class Dog(Animal):#继承Animal这个父类,拥有父类的方法
def __init__(self, name):
self.name = name
def jiao(self):
print(self.name+'汪') Jay = Dog('name')
Jay.chi()#这里就可以调用父类里面的方法

  如果子类和父类都有相同的一个方法,会默认执行子类的方法

/2、

2、Python里面也可以同时继承多个父类,继承方法的优先级是先找自己的方法,然后先左后右

#Python里面一个类可以同时继承多个类,java,C#里面是不可以的
class Animal:
def chi(self):
print(self.name+' 吃')
def she(self):
print(self.name + ' 爱喝')
class god:
def shit(self):
print('shit')
def she(self):
print('黄赌毒')
# class Cat:
# def __init__(self, name):
# self.name = name
# def jiao(self):
# print('瞄')
class Dog(Animal,god):
'''如果方法重复,优先从自己这里寻找,如果方法在两个父类重复
例如这里的she方法,这里默认是左边的父类优先,先在左边父类的寻找
she方法,没有再去下一个父类寻找
'''
def __init__(self, name):
self.name = name
def he(self):
print(self.name + ' 不爱喝')
def jiao(self):
print(self.name+'汪')
Jay = Dog('Jay')
Jay.she()#多个父类的方法继承是先左后右,这里会打印出Jay 爱喝

  在Python3的类的继承里面,是深度优先的,如下面代码

class Jay(object):
def f1(self):
print('Jay')
class A(Jay):
def f(self):
print('A')
class B(Jay):
def f1(self):
print('B')
class C(A):
def f(self):
print('C')
class D(B):
def f(self):
print('D')
class E(C,D):
def f(self):
print('E')
obj = E()
'''在Python3类的继承里面是广度优先的,这里调用f1的方法,会先在E自身里面寻找
,然后接着在C类里面寻找,还是找不到的话会在C的父类A类里面寻找,还找不到就轮
到去D类里面寻找,这里A类B类都继承了Jay这个基类,但是最后才会去Jay里面寻找f1
这个方法,也就是在D和B都找不到f1方法之后才会去Jay类里面寻找,这是广度优先的
体现
'''
obj.f1()#这里输入结果是B

  顺序如图所示

/3

3、多态,Python本身支持多态

#多态,就是多种形态

class Foo:
def f1(self):
print('Foo')
class Bar:
def f1(self):
print('Bar')
def func(arg):#这里显示arg的多种形态,可以是Foo类对象,也可以是Bar类的对象
arg.f1()
f=Foo()
e=Bar()
func(f)#默认参数给的什么就是什么,没有就报错
func(e)

  

4、如果子类和父类都有构造函数,那么可以有两种方法可以继承

class A:
def __init__(self):
print('A的构造方法')
self.name='佳鹏'
self.height = '1.65'
class B(A):
def __init__(self):
print('B的构造方法')
self.age = 23
super(B,self).__init__()#先执行父类的构造方法,再执行自己
b =B()#这样b也有了A的属性
print(b.__dict__)

  结果如图所示

还有一种方法是这样

class A:
def __init__(self):
print('A的构造方法')
self.name='佳鹏'
self.height = '1.65'
class B(A):
def __init__(self):
print('B的构造方法')
self.age = 23
A.__init__(self)#执行父类的构造函数,把B的实例传进去
b =B()#这样b也有了A的属性
print(b.__dict__)

  结果是一样的。

5、在Python2里面,有经典类和新式类之分,下面的图是Python2里面默认的经典类

这里输出的是A,这一种彻底的深入优先,而在Python3里面,由于B类C类都继承A,所以在先找B再找C,最后找A

在Python2里面还有一个新式类,如图,这里在A类那里继承了个object,这里的继承和Python3一样

这里输出的是C

如图是总结

Python面向对象之类的继承(2)的更多相关文章

  1. Python面向对象三要素-继承(Inheritance)

    Python面向对象三要素-继承(Inheritance) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.继承概述 1>.基本概念 前面我们学习了Python的面向对象三 ...

  2. Python面向对象中的继承、多态和封装

    Python面向对象中的继承.多态和封装 一.面向对象的三大特性 封装:把很多数据封装到⼀个对象中,把固定功能的代码封装到⼀个代码块, 函数,对象, 打包成模块. 这都属于封装思想. 继承:⼦类可以⾃ ...

  3. Python - 面向对象编程 - 多继承

    继承的详解 https://www.cnblogs.com/poloyy/p/15216652.html 这篇文章讲的都是单继承,Python 中还有多继承 Python 多继承的背景 大部分面向对象 ...

  4. Python()- 面向对象三大特性----继承

    继承: 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类(基类或超类),新建的类是所继承的类的(派生类或子类) 人类和狗 有相同的属性, 提取了一个__init__方法,在这 ...

  5. python 面向对象八 多继承

    python是支持多继承的,在设计类的继承关系时,通常,主线都是单一继承下来的.但是,如果需要“混入”额外的功能,通过多重继承就可以实现,这种设计通常称之为MixIn. 为了更好地看出继承关系,以Mi ...

  6. python 面向对象及封装继承和多态

    ######装饰器######装饰器的概念 - 装饰器的实现是函数里面嵌套函数;- 装饰器的本质是一个函数, 它可以让其他函数在不需要做任何代码改动的前提下增加额外的功能;- 装饰器需要传递一个函数, ...

  7. 47、Python面向对象中的继承有什么特点?

    继承的优点: 1.建造系统中的类,避免重复操作. 2.新类经常是基于已经存在的类,这样就可以提升代码的复用程度. 继承的特点: 1.在继承中基类的构造(__init__()方法)不会被自动调用,它需要 ...

  8. Python面向对象,析构继承多态

    析构: def __del__(self): print("del..run...") r1 = Role("xx") del r1 结果打印del..run. ...

  9. python面向对象--私有和继承

    一. 私有属性和私有方法 应用场景 在实际开发中,对象的某些属性或方法可能只希望在对象的内部使用,而不希望在外部被访问到 私有属性 就是 对象 不希望公开的属性 (属性即类里面的变量) 私有方法 就是 ...

随机推荐

  1. IOS 进程描述

    ● 什么是进程 ● 进程是指在系统中正在运行的一个应用程序 ● 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 ● 通过“活动监视器”可以查看Mac系统中所开启的进程

  2. WCF使用地址去调用服务端的方法

    前面的章节已经讲过了WCF的代码和SVC页面的分离,这里是分离后,客户端调用代码如下: try { var myBinding = new BasicHttpBinding(); var myEndp ...

  3. 2018.5.27 OraclePLSQL编程 if-else练习和循环结构练习

    if-else运用 declare v_num number(8); begin v_num :=&n; if v_num>0 and v_num<100 then dbms_ou ...

  4. 使用pip 提示UnicodeDecodeError: 'ascii' codec can't decode解决方法

    python目录 Python27\Lib\site-packages 建一个文件sitecustomize.py 内容写: import sys sys.setdefaultencoding('gb ...

  5. install cmake,install torch7

    cmake http://blog.csdn.net/jesse__zhong/article/details/21290675 torch7 http://wanghaitao8118.blog.1 ...

  6. 简述apache,php,mysql三者的关系

    转自:http://blog.csdn.net/w1365966490/article/details/8218959 Apache web 服务器软件.同类产品有微软的 IIS 等.功能是让某台电脑 ...

  7. java连接MySQL数据库操作步骤

    package com.swift; //这里导入的包是java.sql.Connection而不是com.mysql.jdbc.Connection import java.sql.Connecti ...

  8. EasyUI获取正在编辑状态行的索引

    function getRowIndex(target){ var tr = $(target).closest("tr.datagrid-row"); return paseIn ...

  9. 【Django】使用list对单个或者多个字段求values值

    使用list对values进行求值: 单个字段的输出结果: price_info=list(Book.objects.filter(auth_id='Yu').values('book_price') ...

  10. react与微信小程序

    由组员完成 原文链接 都说react和微信小程序很像,但是像在什么部分呢,待我稍作对比. 生命周期 1.React React的生命周期在16版本以前与之后发生了重大变化,原因在于引入的React F ...