详细介绍Python类的继承与多态

news/2024/7/5 3:07:58
大家好,本篇文章主要讲的是Python类的继承与多态详细介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览

概念

类(Class): 用来描述具有相同的属性和方法的对象的集合。

类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

类有一个名为 __init__() 的特殊方法(构造方法),该方法在类实例化时会自动调用

self:self 代表的是类的实例,代表当前对象的地址,而 self.class 则指向类。

类调用 Car.weight

实例化 car01=Car(5)

实例对象调用 car01.weght

类的创建

#创建小汽车类和客车类
class Car(object):def __init__(self,weight):    #实例化对象时传入特有属性self.weight=weightprint("小汽车")print(weight,"t")          #定义类内方法,功能是打印出实例化的小汽车的重量def func(self):print("小汽车的驾驶方法")
class Passenger_car(object):def __init__(self,weight):self.weight=weightprint("客车")print(weight,"t")def func(self):print("客车的驾驶方法")

类的继承

我们在构造类时,Python3默认我们继承了object这个基类,我个人理解object就是个空的类,可以不用管为何要在括号中写上object,这是Python3的特性,在python2中如果你没有写object的话不会默认继承了object这个基类。

同样的我们自己希望继承的父类只需要把objetc改为我们自己定义的类名即可。子类中可以拥有父类中所有的公有属性和方法,但是可以通过在变量名前加下划线使其变为私有,这样子类就不可以访问父类中的成员了。

class Bus028(Passenger_car):def __init__(self,weight): #对基类方法的重写self.weight=weightprint("28路公交车")print(weight,"t")def func(self):           #对基类方法的重写 print("28路公交车的驾驶方法")#子类在父类中继承过来了func方法,但是在父类中修改了原来方法的内容

多态的使用

以下三个公交车类的父类均为客车类,我们可以写一个funcs方法使得每次调用funcs方法时,传入不同的对象以执行不同的func方法,具体实现如下:

class Bus028(Passenger_car):def __init__(self,weight):self.weight=weightprint("28路公交车")print(weight,"t")def func(self):print("28路公交车的驾驶方法")
class Bus906(Passenger_car):def __init__(self,weight):self.weight=weightprint("906路公交车")print(weight,"t")def func(self):print("906路公交车的驾驶方法")
class BusB32(Passenger_car):def __init__(self,weight):self.weight=weightprint("B32路公交车")print(weight,"t")def func(self):print("B32路公交车的驾驶方法")
def funcs(obj):        #此处obj表示传入一个实例化对象obj.func()

主函数:

from demo01 import *
def main():car01=Car(5)    #例化为带有重量为5t的一个具体对象car01.func()passenger_car01=Passenger_car(20)    #例化为带有重量为20t的一个具体对象passenger_car01.func()bus028_01=Bus028(15)        #例化为带有重量为15t的一个具体对象bus906_01=Bus906(15)        #例化为带有重量为15t的一个具体对象busB32_01=BusB32(15)        #例化为带有重量为15t的一个具体对象funcs(bus028_01)            #调用funcs方法funcs(bus906_01)funcs(busB32_01)if __name__=="__main__":main()

可以看到,我将小汽车实例化为带有重量为5t的一个具体对象,将客车实例化为带有重量为20t的一个具体对象,将三个公交车实例化为带有重量为15t的一个具体对象.

如上图所示,我每次在调用funcs方法时都传入了一个实例化对象,funcs根据不同的对象执行相应的内部方法。

注:(我习惯上将方法读作函数,在以后的文章中,方法一律被函数代替)

到此这篇关于Python类的继承与多态详细介绍的文章就介绍到这了。


http://lihuaxi.xjx100.cn/news/280428.html

相关文章

4篇SCI,1篇A类期刊,这位复旦博士生分享自身科研经验

点击上方,选择星标或置顶,每天给你送干货!阅读大概需要6分钟跟随小博主,每天进步一丢丢整理:募格学术本文来源:复旦管院李婷,复旦大学管理学院统计系2016级博士生,获复旦大学第十一届…

面向可解释的NLP:北大、哈工大等提出文本分类的生成性解释框架

作者 | Hui Liu, Qingyu Yin, William Yang Wang 译者 | Rachel编辑 | Jane出品 | AI科技大本营(ID: rgznai100)【导语】北大、哈工大和加州大学圣巴巴拉分校在 ACL 2019 的一篇论文中联合提出了一个全新的生成性解释框架,该框架能够对分类策…

android中常见的内存泄漏和解决的方法

android中的内存溢出预计大多数人在写代码的时候都出现过,事实上突然认为工作一年和工作三年的差别是什么呢。事实上干的工作或许都一样,产品汪看到的结果也都一样,那差别就是速度和质量了。 写在前面的一点儿想法:工作做完了事实…

机器人视觉的九大挑战

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自:新机器视觉机器人视觉解决方案是我们实现机器人视野的几大挑战。即便变得越来越简单易用,还是有一些棘手的问题。很多因素影响机器人在环…

android dslr控制软件,DSLR Controller

DSLR Controller中文名字是单反控制器,是一款专业的单反手机控制端软件,用户可以使用该手机软件控制单反,调节单反的相关数据,控制拍摄,非常方便,需要的可以下载使用!软件简介DSLR Controller是…

BFS之三(单向bfs和康托压缩)

//poj 1077 Eight#include <iostream> //单向bfs和康托压缩#include<string>using namespace std;bool visited[1000000];int fac[]{1,1,2,6,24,120,720,5040,40320,362880}; //9!表int cantor(int arr[]) {int temp,num1; //当排列为…

Python实现环形链表详解

这篇文章主要为大家详细介绍了Python实现环形链表&#xff0c;文中示例代码介绍的非常详细&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下 本文实例为大家分享了Python实现环形链表的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下 我们将…

为什么数据科学不值得?

作者 | Dario Radečić 译者 | 陈思 本应是 21 世纪最热门的工作&#xff0c;实际上却可能没有那么火爆。数据科学已经陪伴我们一段时间了&#xff0c;它已经不再只是一个热门词汇。人们和公司都利用它创造了价值和金钱&#xff0c;但它真的是未来的职业吗&#xff1f; 作者注…