1.单继承

 # 动物类
class Animal(object): def __init__(self, name):
self. __name = name def run(self):
print("%s 喜欢跑步" % self.__name) def sleep(self):
print("%s 喜欢睡觉" % self.__name) def getName(self):
return self.__name # 猫类
class Cat(Animal): def __init__(self, name, type):
# 调用父类构造
# 采用super
super(Cat, self).__init__(name)
# 采用超类
# Cat.__init__(name) self.type = type def bark(self):
print("%s 喜欢叫" % self.getName()) # 大黄猫
class BigYellowCat(Cat): def __init__(self, name):
# super()可以查找父类以及父类的父类的方法,但是构造访问上一个父类
# super(A,self),表示查找A类的父类以及父类的父类方法
super(Cat, self).__init__(name)
self.color = "黄" def __str__(self):
return ("%s 是一只大%s 猫" % (self.getName(), self.color)) cat = BigYellowCat("TOM") print(cat)
cat.run()
cat.sleep()
cat.bark()

单继承,只需要在创建类是增加()添加继承的类名,即class A(B):....
上面可以看到,Cat类继承了Animal类,那么将获取Animal中所有公有的属性和方法,私有的属性和方法不继承
在创建对象时会默认调用构造方法,在继承中只会调用当前类的构造方法,有些属性定义在父类中,那么如何进行初始化呢?
这里采用两种方法,一种是采用超类,即类名.__init__(),但这里不推荐,这种格式一般是用来访问类属性的,
第二种方式是采用super(),通过super就能访问父类的所有方法,如果其父类有重写了父类的父类方法,那么会优先访问父类方法
当然需要定位访问某一个父类的方法,需要采用super(A, self),表示A类的父类(包括其父类的父类)

2.类方法和类属性

 # 动物类
class Animal(object): # 定义类属性
__count = 0 # 定义类方法
@classmethod
def getCount(cls):
return cls.__count def __init__(self, name="TOM"):
self. name = name def __new__(cls, *args, **kwargs):
# 记录创建了多少个对象
cls.__count += 1
return super(Animal, cls).__new__(cls) print(Animal.getCount()) cat = Animal("猫")
dog = Animal("狗") print(Animal.getCount())

定义类属性比较简单,定义类方法需要关键字@classmethod,cls就表示当前类,与self的作用类似,调用时直接用类名.进行访问

3.静态方法

class Tool(object):

    @staticmethod
def function():
print("我是静态方法!") Tool.function()

静态方法与类本身没有任何关系,Tool类可以将它理解为将多个函数聚集在一起的工具类,通常将能够全局用的方法封装在这里

4.多继承

 class Ear(object):

     def getEars(self):

         return " 耳朵"

     def fun(self):
print("Ear") class Nose(object): def getNose(self): return " 鼻子" def fun(self):
print("Nose") class Eyes(object): def getEyes(self): return " 眼睛" def fun(self):
print("Eyes") class Face (Nose, Eyes, Ear): def getFace(self): print("我有:", end="") # 能够调用所有继承的方法
print(self.getEars() + self.getEyes() + self.getNose()) face = Face()
face.getFace()
face.fun()

多继承能够将所有父类的方法进行调用,但如果父类方法出现相同方法名时,根据继承的先后次序,优先运行最先加载的

5.多态

 class Person(object):

     def __init__(self, name):
self.name = name def fun(self):
print(self.name) class Student(Person): def __init__(self, name, score):
super(Student, self).__init__(name)
self.score = score def fun(self):
print("%s : %.2f分 " % (self.name, self.score)) s1 = Person("ssss")
s1.fun() s2 = Student("xxxx", 80.2)
s2.fun()

python的多态比较简单,只是简单的涉及方法重写的问题,如需要深入了解可学习一下其他语言(如java)的多态

python的继承多态以及异常处理的更多相关文章

  1. python基础——继承和多态

    python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...

  2. python面向对象之继承/多态/封装

    老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...

  3. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

  4. python 继承 多态

    python 的继承 #-*- coding:utf-8 -*-class A(object): def __init__(self): print('A:我是肯定会执行的!!') def fun(s ...

  5. python oop常用术语 继承 多态 封装

    面向对象优点 1.通过封装明确了内外 2.通过继承+多态在语言层面支持了归一化设计 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现 ...

  6. Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)

    Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 ​ 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...

  7. python面向对象(封装,继承,多态)

    python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...

  8. python 面向对象之多态与绑定方法

    多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...

  9. python自动化开发-[第九天]-异常处理、进程

    今日概要: 1.异常处理使用 2.进程 3.paramiko模块使用 一.异常处理 1.常见的错误异常 #错误异常一 print(a) #NameError #错误异常二 int('sdadsds') ...

随机推荐

  1. mkvirtualenv创建python虚拟环境

    为什么要创建虚拟环境呢? 如果在我们本地开发好几个项目,每个项目又用到很多第三方插件,如果没没用创建虚拟环境,那么本地项目插件就会很多很乱,如果有虚拟环境就不一样了 虚拟环境安装 pip instal ...

  2. centsos 查看系统版本信息

    [root@hostuser gitlab]# lsb_release -a LSB Version: :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cx ...

  3. jumserver 官方文档和

      一步一步安装(CentOS) 本文档旨在帮助用户了解各组件之间的关系, 生产环境部署建议参考 进阶安装文档 安装过程中遇到问题可参考 安装过程中常见的问题 测试推荐环境 CPU: 64位双核处理器 ...

  4. 街机模拟.samsho2

    1.sdyrugal https://www.douyu.com/599516 2.红中哥:西瓜视频  搜索 "红中哥游戏解说" 我搜索到的地址:https://live.ixig ...

  5. Windows USB 编程

    GUID #include <initguid.h> // For DEFINE_GUID // Device Interface GUID.DEFINE_GUID(GUID_DEVINT ...

  6. Java 继承学习

    Java 继承 继承实现: 在Java中,如果实现继承的,需要使用Java关键字——extends : 被继承的类叫做超类,继承超类的类叫子类.(一个子类亦可以是另一个类的超类) class 子类 e ...

  7. 一些学习比较好的网站,及es6学习好网站,前端用的相关库,及知道的插件

    图形可视化:d3js  echarts https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects ...

  8. python在读取配置文件存入列表中,去掉回车符号

    self.receiver = map(lambda x: x.strip(), receiver_list) # 去掉list中的回车符号

  9. Java学习之路(四):面向对象

    Java中的面向对象 概念:面向对象的原本的意思是“”万物皆对象“” 面向对象思想的特点: 是一种更符合我们思想习惯的思想,将复杂的事情简单化 使我们角色发生了转换,将我们从执行者变成了指挥者 面向对 ...

  10. Node.js des加密

    常见的加密算法基本分为这几类,1 :线性散列算法.2:对称性加密算法.3.非对称性加密算法 (记记记) 线性散列算法(签名算法):MD5,SHA1,HMAC比如MD5:即Message-Digest ...