Python面向对象程序设计之继承、多态原理与用法详解
作者:随风行云 发布时间:2023-07-08 18:17:52
标签:Python,面向对象,继承,多态
本文实例讲述了Python面向对象程序设计之继承、多态原理与用法。分享给大家供大家参考,具体如下:
相关内容:
继承:多继承、super、__init__、重写父类变量或函数
多态
继承:
在Python3中,不写基类的类默认继承object
继承就是子类获得了父类的全部功能:比如学生和老师都有“姓名,性别,年龄、ID”等学校人员属性,如果学生和老师都直接继承学校人员的“姓名,性别,年龄、ID”,那么就不必要在学生类和老师类中重复定义了。
继承指定类的方式是:class 类名(基类名)
class SchoolPerson:
def study(self):
print("it's time to study")
class Student(SchoolPerson):#继承的方法
pass
a=Student()
a.study()
----------------------
结果:
it's time to study
上述结果显示,Student继承了SchoolPerson中的study函数
python支持多继承:class SubClassName (ParentClass1[, ParentClass2, ...]):
对象对于属性【包括变量和函数】的查找路径:本实例对象--》本类--》基类【如果有多个基类,从左到右到基类中查找】
可以调用基类的__init__方法:
方式有两种:,建议使用super,避免错误使用多次基类的__init__
class SchoolPerson:
def __init__(self,name,age,sex,mid):
self.name=name
self.age=age
self.sex=sex
self.mid=mid
def study(self):
print("it's time to study")
class Student(SchoolPerson):#继承的方法
def __init__(self,name,age,sex,mid,grade):
# super(Student,self).__init__(name,age,sex,mid)
SchoolPerson.__init__(self,name,age,sex,mid)
self.grade=grade
def study(self):
print("i am student,i want to study")
a=Student('A',18,'m','001',1)
a.study()
print(a.name,a.age,a.mid,a.grade)
对于多继承中的调用基类的__init__:无论多少个基类,也只会调用一次基类的__init__
可以覆盖父类中属性【变量、函数】:
class SchoolPerson:
def __init__(self,name,age,sex,mid):
self.name=name
self.age=age
self.sex=sex
self.mid=mid
def study(self):
print("it's time to study")
class Student(SchoolPerson):#继承的方法
def __init__(self,name,age,sex,mid,grade):
super(Student,self).__init__(name,age,sex,mid)
self.grade=grade
def study(self):
print("i am student,i want to study")
a=Student('A',18,'m','001',1)
a.study()
--------------------------
结果:
i am student,i want to study
多态:
python是否具有多态具有争议性。
但不论是否具有,这并不影响我们的具体使用。
class Animal:
def __init__(self, name):
self.name = name
def talk(self):
pass
@staticmethod ####如果硬要说多态,建议使用静态方法来处理,而非普通函数
def animal_talk(obj):
obj.talk()
class Cat(Animal):
def talk(self):
print('喵!')
class Dog(Animal):
def talk(self):
print('wang')
d = Dog("小黑")
c = Cat("小白")
# def animal_talk(obj):
# obj.talk() ###这也是一个能实现功能的函数,因此python多态才具有争议性
Animal.animal_talk(c)
Animal.animal_talk(d)
希望本文所述对大家Python程序设计有所帮助。
来源:https://www.cnblogs.com/progor/p/8419973.html
0
投稿
猜你喜欢
- a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/html; charset=gb
- 用python来实现一个抽奖程序,供大家参考,具体内容如下主要功能有1.从一个csv文件中读入所有员工工号2.将这些工号初始到一个列表中3.
- Nextcloud 是一款自由 (开源) 的类 Dropbox 软件,由 ownCloud 分支演化形成。它使用 PHP 和 JavaScr
- 02条件语句和while循环三目运算a = 6#原判断语句if a > 5:print(True)else:print(False)#
- 程序设计中我们时常需要检测用户输入是否正确,特别是姓名,地址等等是不是输入的汉字。那么,如何判断一个字符是不是汉字呢?其实在asp中至少有两
- 1、find(sub[, start[, end]])在索引start和end之间查找字符串sub找到,则返回最左端的索引值,未找到,则返回
- 最好的方法: 先说一下基本的东西: <%@ codepage=65001%>UTF-8 <%@&nbs
- 软件版本:apache:Apache 2.4.6 Win64 PHP:PHP 5.5 VC11 x64 Non Thr
- 大家都用过企业管理器中的--“收缩数据库”,里面的功能的确可以收缩数据库的日志文件(.ldf)和数据文件(.mdf),但都会发现同样的问题,
- 假设我们已经安装好了tensorflow。一般在安装好tensorflow后,都会跑它的demo,而最常见的demo就是手写数字识别的dem
- 如何在读取Excel文件时创建列表的下拉菜单?代码如下,用来创建工作表列表的下拉菜单: < select 
- 1.为什么写这个?一些简单的页面,无需用比较大的框架来进行爬取,自己纯手写又比较麻烦因此针对这个需求写了talonspider:•1.针对单
- 数据完整性是任何数据库系统要保证的重点。不管系统计划得有多好,空数据值的问题总是存在。本文探讨了在SQL Server中处理这些值时涉及的3
- 1. 类的继承与方法的重载上面就是先定义了一个类A,然后由定义了一个类B,B继承了类A,这样B就有了A的非私有属性和方法。class Was
- 1. 数据类型 type()#!/usr/bin/env python# -*- coding: utf-8 -*-# Yongqiang
- 一个简单的tokenizer分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的
- 环境准备 python3.52 pycharm5.05 Pillow 自制的验证码工具包/utils/check_code 验证码的作用防恶
- 本文中我们将通过一个例子来介绍SQL Server 2005的一个Bug,首先,在建立同义词链接Oracle的时候,我们会使用下面的语句:C
- 获取不带扩展名的文件的名称:import osprintos.path.splitext("path_to_file")
- open函数你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的辅助方法才可以调用它进行读写。语法:fil