面向对象:理解 Python 类的单继承与多继承

栏目: 后端 · 前端 · 发布时间: 6年前

面向对象:理解  <a href='https://www.codercto.com/topics/20097.html'>Python</a>  类的单继承与多继承

俗话说"龙生龙凤生凤老鼠的孩子会打洞",每种动物都有各自的特性,比如

老鼠会打洞

猫会爬树

鲨鱼会游泳

不同种类有不同的天性。而在 程序员 的思维中, 动物是对象, 天性是这个类方法或者属性。

再延伸一下,比如Python是面向对象编程语言。有List、Str、Dict、Tuple等数据类型,这些数据类型也是对象,比如List类可以有count方法,我们可以通过count方法统计列表中各个元素的数量。

我们可以简单的将定义类理解成就是定义数据结构,同时给这种数据结构制定一些独特的属性或者方法。我们先看最简单的类,在这里我们定义了Point类

#为了显示多个调用的变量
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'

class Point(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def String(self):
        #显示Point的信息
        return "{X:" +  str(self.x) + ", Y:" + str(self.y) + "}"

调用类之前我们要实例化,这个可以理解成神笔马良画的画,如果不将其搞活,永远是画。通过实例化,调用实例,画中对象就活了。

#实例化Point类
point = Point(x=3, y=4)

#显示point对象
point 

#显示point的String方法
point.String() 

代码运行结果

<__main__.Point at 0x10d98ec18>

'{X:3, Y:4}'

单继承

白马和黑马,都是马。

既然都是马,所以不论黑马白马都有马的特性,都可以奔跑。

所以我们可以定义一个基本的"马类",之后让"白马类"和"黑马类"继承自"马类"

白马黑马 继承 ,这就是单继承。因为只是继承了 一个 基类 。现在我们定义一个Circle类, 圆是由圆心和半径决定的,所以Circle会继承并使用Point的一些特性。

class Circle(Point):

    def __init__(self, x=0, y=0, radius=0):
        #Circle继承并使用Point的__init__函数
        Point.__init__(self, x, y) 

         #不同于Point的参数radius
        self.radius = radius      


    def String(self):
        #显示Circle的信息
        return Point.String(self) + ", {Radius:" + str(self.radius) + "}"

现在我们看看Circle

#实例化Circle类
circle = Circle(x=3, y=2, radius=5)

#显示circle对象信息
circle

#显示circle的String方法
circle.String()

代码运行结果

<__main__.Circle at 0x10d911c18>

'{X:3, Y:2}, {Radius:5}'

多继承

多继承,顾名思义就是某个类继承了多个父类(基类)

class Size(object):

    def __init__(self, width, height):
        self.width = width
        self.height = height

    def String(self):
        return "{Width: " + str(self.width) + ", Height: " + str(self.height) + "}"

继续

#实例化Size对象
size = Size(width=5, height=3)

size
size.String()

运行结果

<__main__.Size at 0x10d97e828>

'{Width: 5, Height: 3}'

现在已经有了Point、Size类,以及每个类中的String()方法。现在想构建 正四方形Rectangle类 。为了让Rectangle具有Point和Size的一些特性,需要让Rectangle继承Point和Size的一些特有的方法。

class Rectangle(Point, Size):

    def __init__(self, x, y, width, height):

        #让Rectangle使用Point中的init方法,使得Rectangle本身含有x和y属性值
        Point.__init__(self, x, y)
        #让Rectangle使用Size中的init方法,使得Size本身含有width和height属性值
        Size.__init__(self, width, height)

    def String(self):
        return "Rectangle's init point is " + Point.String(self) + "; Size is " + Size.String(self)

Rectangle 继承了 PointSize 两个类,使得Rectangle不用定义 x、y、width、height 。而且 Rectangle的String方法 可以直接调用 Point和Size对象的String方法

#实例化Rectangle
rect = Rectangle(x=0, 
                 y=0, 
                 width=5, 
                 height=3)

#调用rect
rect

#显示其方法
rect.String()

运行结果

<__main__.Rectangle at 0x10d978390>

"Rectangle's init point is {X:0, Y:0}; Size is {Width: 5, Height: 3}"

往期文章

《用Python做文本分析》视频教程  

Pytorch实战:使用RNN网络对姓名进行分类

10分钟理解深度学习中的~卷积~

深度学习之 图解LSTM

100G Python学习资料(免费下载)

100G 文本分析语料资源(免费下载)     

typing库:让你的代码阅读者再也不用猜猜猜

Seaborn官方教程中文教程(一)

数据清洗 常用正则表达式大全

大邓强力推荐-jupyter notebook使用小技巧

PySimpleGUI: 开发自己第一个软件

深度特征合成:自动生成机器学习中的特征

Python 3.7中dataclass的终极指南(一)

Python 3.7中dataclass的终极指南(二)

15个最好的数据科学领域Python库

使用Pandas更好的做数据科学

[计算消费者的偏好]推荐系统与协同过滤、奇异值分解

机器学习: 识别图片中的数字

应用PCA降维加速模型训练

如何从文本中提取特征信息?

使用sklearn做自然语言处理-1

使用sklearn做自然语言处理-2

机器学习|八大步骤解决90%的NLP问题      

Python圈中的符号计算库-Sympy

Python中处理日期时间库的使用方法  

视频讲解】Scrapy递归抓取简书用户信息

美团商家信息采集神器

用chardect库解决网页乱码问题


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

机器学习实战

机器学习实战

Peter Harrington / 李锐、李鹏、曲亚东、王斌 / 人民邮电出版社 / 2013-6 / 69.00元

机器学习是人工智能研究领域中一个极其重要的研究方向,在现今的大数据时代背景下,捕获数据并从中萃取有价值的信息或模式,成为各行业求生存、谋发展的决定性手段,这使得这一过去为分析师和数学家所专属的研究领域越来越为人们所瞩目。 本书第一部分主要介绍机器学习基础,以及如何利用算法进行分类,并逐步介绍了多种经典的监督学习算法,如k近邻算法、朴素贝叶斯算法、Logistic回归算法、支持向量机、AdaB......一起来看看 《机器学习实战》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具