python的继承多态以及异常处理
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的继承多态以及异常处理的更多相关文章
- python基础——继承和多态
python基础——继承和多态 在OOP程序设计中,当我们定义一个class的时候,可以从某个现有的class继承,新的class称为子类(Subclass),而被继承的class称为基类.父类或超类 ...
- python面向对象之继承/多态/封装
老师说,按继承/多态/封装这个顺序来讲. 子类使用父类的方法: #!/usr/bin/env python # coding:utf-8 class Vehicle: def __init__(sel ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
- python 继承 多态
python 的继承 #-*- coding:utf-8 -*-class A(object): def __init__(self): print('A:我是肯定会执行的!!') def fun(s ...
- python oop常用术语 继承 多态 封装
面向对象优点 1.通过封装明确了内外 2.通过继承+多态在语言层面支持了归一化设计 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现 ...
- Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态)
Python 入门 之 面向对象的三大特性(封装 / 继承 / 多态) 1.面向对象的三大特性: (1)继承 继承是一种创建新类的方式,在Python中,新建的类可以继承一个或多个父类,父类又可以 ...
- python面向对象(封装,继承,多态)
python面向对象(封装,继承,多态) 学习完本篇,你将会深入掌握 如何封装一个优雅的借口 python是如何实现继承 python的多态 封装 含义: 1.把对象的属性和方法结合成一个独立的单位, ...
- python 面向对象之多态与绑定方法
多态与多态性 一,多态 1,多态指的是一类事物有多种形态(python里面原生多态) 1.1动物有多种形态:人,狗,猪 import abc class Animal(metaclass=abc.AB ...
- python自动化开发-[第九天]-异常处理、进程
今日概要: 1.异常处理使用 2.进程 3.paramiko模块使用 一.异常处理 1.常见的错误异常 #错误异常一 print(a) #NameError #错误异常二 int('sdadsds') ...
随机推荐
- python 小练习('''产生了多少个对象''')('''模拟两个英雄,昵称,攻击力,生命值''')
'''小练习 计数器,产生了多少个对象''' # class Student: # school = 'luffycity' # count = 0 # def __init__(self, name ...
- 一篇在一个Excel表中创建多个sheet的代码
package projectUtil; import org.apache.commons.lang3.StringUtils; import org.apache.poi.hssf.usermod ...
- J15W-J45W全铜质截止阀厂家,J15W-J45W全铜质截止阀价格 - 专题栏目 - 无极资讯网
无极资讯网 首页 最新资讯 最新图集 最新标签 搜索 J15W-J45W全铜质截止阀 无极资讯网精心为您挑选了(J15W-J45W全铜质截止阀)信息,其中包含了(J15W-J45W全铜质截止阀)厂 ...
- Unity QualitySettings.antiAliasing 抗锯齿
QualitySettings.antiAliasing 抗锯齿 Description 描述 Set The AA Filtering option. 设置AA过滤选项. The AntiAliaz ...
- 持续集成Jenkins入门【截图】
- c++ 网络编程(四) LINUX/windows下 socket 基于I/O复用的服务器端代码 解决多进程服务端创建进程资源浪费问题
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9613861.html 好了,继上一篇说到多进程服务端也是有缺点的,每创建一个进程就代表大量的运 ...
- mvc框架的学习步骤
1 搭建环境.有个感性认识 2 如何完成controller和viewer的映射 3 如何把值传给controller 4 controller如何把值传给view 5 异常处理 6 页面标签 7文件 ...
- 我java学习时的模样(二)
去掉自己浮躁的心 工作了三年,见识过高山,也见过低估,高山同大神一起共事,低估是几家特别烂的外包公司,现在有了另一种心境.已经开始重视自己,去掉当初浮躁的心. 毕业的一两年内,是人成长特别快的时期,也 ...
- mybatis 批量增加 Parameter '__frch_item_0' not found. Available parameters are [list]
当在mybatis用到foreach的时候,会报这个错误Parameter '__frch_item_0' not found. Available parameters are [list]会出现的 ...
- Mybatis缓存(一)
1.什么是缓存 Mybatis提供缓存,用于减轻数据压力,提高数据库性能. 2.Mybatis缓存分类 Mybatis的缓存分为一级缓存和二级缓存. Mybatis的一级缓存 1.一级缓存的范围 1 ...