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. 让windows登陆界面显示administrator账户

    如果windowsXP只有一个administrator账户,在开机登陆windows的欢迎界面,会出现这个账户名,点击,输入密码就可登陆到windows桌面: 如果新建了另一个管理员账户,在欢迎界面 ...

  2. js计算日期相差天数

    日期不能直接相加减比较大小,需要转换一下然后计算最后转换成天,当然,你也可以根据同样类似的方法去转换成小时,或者月,年. function DateDiff(sDate1, sDate2) { //s ...

  3. ajax session timeout

    授权过期后AJAX操作跳转到登录页的一种全局处理方式 菜鸟程序员之Asp.net MVC Session过期异常的处理 基于WebImage的图片上传工具类

  4. lua-nginx-module模块常用命令

    ngx.location.capture 用法: local res = ngx.location.capture(uri, options) 发起一个同步非阻塞的nginx子请求,uri是inter ...

  5. 《大数据日知录》读书笔记-ch15机器学习:范型与架构

    机器学习算法特点:迭代运算 损失函数最小化训练过程中,在巨大参数空间中迭代寻找最优解 比如:主题模型.回归.矩阵分解.SVM.深度学习 分布式机器学习的挑战: - 网络通信效率 - 不同节点执行速度不 ...

  6. [转]C#算法题

    1:不允许使用循环语句.条件语句,在控制台中打印出1-200这200个数. 参考答案:这里我使用的是递归. static void Main(string[] args) { Print(); Con ...

  7. Nginx的Permission denied错误

    Nginx的Permission denied错误 环境: CentOS7 问题描述 今天搭建了nginx+uwsgi+django的环境,之后通过浏览器访问遇到下面问题: 2017/03/31 19 ...

  8. Bash编程(4) 参数与变量

    1. 变量命名 变量命名只能使用数字.下划线.字母,且仅能以下划线或字母开头. 变量很少使用单个字母,单个字母一般用于循环或读取一次性文件的时候. 例: while IFS=: read login ...

  9. Firebird with lock

    Firebird 锁,默认是行级锁,即记录锁. 通常最常用的是 with lock ,即:将查出的所有记录都锁定,但允许其他事务读取,不允许其他事务更新.删除.本事务允许更新. 另一种 for upd ...

  10. [转]angularjs之ui-grid 使用详解

    本文转自:http://blog.csdn.net/qhkabuqiluo/article/details/52237710 最近一段时间在使用angularjs 然后就找到ui-grid 这个比较不 ...