让你茅塞顿开的Python面向对象编程的快速指南!

开课吧开课吧小西2021-02-22 16:25

就像我之前提到的那样,编程是一种艺术,它可以利用自然概念来解决我们身边的问题。自然界中的一切都是物体。每个对象都有自己的行为和属性。面向对象编程是一种优秀的编程范式,它使我们能够在编程中创建虚拟对象,并具有一个称为类的公共蓝图。这篇文章中,我们试图了解OOP的概念和它的基本功能,比如封装,抽象,继承和多态。如果您是Python编程语言的初学者,只需阅读前面的文章就可以了解一些基本的内容。

理解对象世界

这个世界是由各种各样的物体组成的。它可能是生物,也可能是非生物,简单地说,它可以被称为对象。对象可以通过其行为来分类。尝试从这里给出的指令中找到对象。

这个物体有四个轮子。

里面有引擎。

它需要燃料。

很可能,你们中的大多数人都能理解我描述的内容。是车。在这里,我们世界上有数以百万计的汽车。每辆车都是不同的物体。但是,所有的汽车都可以用它的行为来分类。在面向对象编程中,每个CAR都是一个对象,而包含对象行为的公共蓝图称为类。

一旦创建了具有某些属性的类,那么可以在该类下创建任意数量的对象。在类下创建对象称为实例化。为了构造一个类,我们应该清楚地了解对象的行为。

The object-oriented model makes it easy to build up programs by accretion. What this often means, in practice, is that it provides a structured way to write spaghetti code.

照照艾米·沙姆布伦在……上面防溅

用Python创建类

Python中的类是使用名为class。类名必须遵循在Python中创建标识符的规则。让我们尝试创建一个名为car .

语法:类名:

要在Python中创建一个空类,我们可以使用PASS关键字。下面是Python中的空类示例。

class Car:

 pass

现在创建了类车。但是没有关于这辆车给全班的描述。它只是创建了汽车类。我们仍然可以在CAR类下创建一个对象。

如何在类下创建对象

在类下创建对象非常简单。让我们尝试在前面代码中创建的CAR类下创建三辆汽车。在那之前我们得收集一些关于这辆车的信息。下表描述了每辆汽车的属性。

Object Company Speed Color Year

 Car1 XYZ 125 RED 2019

 Car2 ABC 150 BLUE 2020

 Car3 LMN 200 YELLOW 2020

现在,我们已经将每一种信息分类为不同的类别。Car1、Car2和Car3是Car类下的对象。公司,速度,颜色和年份是汽车的特性。这些属性将帮助我们为汽车对象创建蓝图。

语法:object_name=Class_name()

class Car:

 pass

Car1 = Car()

Car2 = Car()

Car3 = Car()

现在,所有三个CARS都被创建为类名CAR下的对象。现在我们可以将每个属性分配给汽车对象。

class Car:

 pass

Car1 = Car()

Car2 = Car()

Car3 = Car()Car1.company = "ABC"

Car2.company = "XYZ"

Car3.company = "LMN"

每个汽车对象的公司名称使用点操作符分配给该对象。我们也可以分配所有其他值。

class Car:

 pass

Car1 = Car()

Car2 = Car()

Car3 = Car()Car1.company = "ABC"

Car2.company = "XYZ"

Car3.company = "LMN"Car1.speed = 125

Car2.speed = 150

Car3.speed = 200Car1.color = "RED"

Car2.color = "BLUE"

Car3.color = "YELLOW"Car1.year = 2019

Car2.year = 2020

Car3.year = 2020

但这段代码与过程编程没有任何区别。这也类似于对不同变量名的正常值分配。让我们尝试使用下面一节中称为构造函数方法的方法来解决这个问题。

照照尼克·福林斯在……上面防溅

构造方法的概念

在Python中,方法__init_()称为构造函数方法。它帮助我们为对象创建蓝图。在使用此构造函数方法时,对象实例化将导致该方法。这意味着,每当您创建一个新对象时,将调用__ini__方法,并执行在该方法中写入的任何内容。查看下面的示例,其中我们尝试使用构造函数而不是空类创建类。

class Car:

 def __init__(self):

 print("You created a new object")

Car1 = Car()

Car2 = Car()

Car3 = Car()

输出量

You created a new object

You created a new object

You created a new object

我们可以使用构造函数方法的这种能力为每个变量赋值。在上面的示例中,用一个参数定义的构造函数方法称为self。但是,在创建对象时,没有传递参数。简单地说,实例化过程中传递的参数将是n-1其中n不是构造函数方法中描述的参数。Self将对象作为参数本身。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)

此代码与以前的值赋值代码相同。通过构造函数方法传递的实际参数包括Car1,"ABC",125, "RED",2019.让我详细分析一下在创建名为Car1 .

创建对象Car1时,将调用CAR类中的__init_()方法。它取代了所有self关键字添加到对象名称中。例如,self.company将是Car1.company,则将该值赋值给Car1.company。这就是构造函数方法在用Python进行面向对象编程中扮演重要角色的原因。

照照戴恩·迪纳在……上面防溅

为对象创建方法

类不仅可以有构造函数方法,还可以创建自己的方法。在前面的代码中,我们用CARS创建了一个类。让我们尝试创建一个方法来获取对象的值。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)Car1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Car1.get_company()

Car2.get_speed()

Car3.get_color()

输出量

XYZ

150

YELLOW

使用封装使属性私有

让我们尝试使用正常值分配来改变Car2的速度值。在上面的代码中,下面的语句将很容易地改变速度。

Car2.speed = 250

这清楚地表明,信息没有适当的安全性。不幸的是,Python没有像公共或私有数据那样的任何分类。我们可以在变量名之前使用双下划线来保护信息。

class Car:

 def __init__(self,company,speed,color,year):

 self.__company = company

 self.__speed = speed

 self.__color = color

 self.__year = year

 def get_speed(self):

 print(self.__speed)

 def get_company(self):

 print(self.__company)

 def get_color(self):

 print(self.__color)

 def get_year(self):

 print(self.__year)Car1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Car2.__speed = 250

Car2.get_speed()

输出量

在上面的代码中,Double_保护数据,以便第二辆车的速度值仍然是200。这在面向对象编程中称为数据保护或封装。

继承

继承是在父类和子类之间创建关系的概念,它支持代码的可重用性。在继承中,我们只是将属性从父类继承到子类。在继承中,来自类的对象可以访问在不同类中定义的方法。

语法:类名(父类):

看看下面的代码,其中我们添加了一个名为Trike的类,作为CAR类的子类。让我们尝试从在CAR类中定义的方法中获得trike 1的速度。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)class Trike(Car):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Trike1 = Trike("GHJ",90,"Grey",2020)

Trike2 = Trike("DFG",80,"Violet",2019)Trike1.get_speed()

输出量

在上面的代码中,Trike 1是一个以类名Trike创建的对象。由于Trike类是作为car类的子类创建的,因此它可以访问该方法。get_speed这是在CAR类中定义的。

继承类型

让我们使用下面几节中的代码示例讨论四种重要的继承类型。本文涵盖的类型如下所示。

单继承

多重继承

多级遗传

层次继承

单继承

当程序中的子类只有一个父类时,继承类型称为单一继承。下面的代码是单个继承的示例。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)class Trike(Car):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Trike1 = Trike("GHJ",90,"Grey",2020)

Trike2 = Trike("DFG",80,"Violet",2019)Trike1.get_speed()

Trike1.get_company()

Trike2.get_color()

Trike2.get_year()

输出量

90

GHJ

Violet

2019

多重继承

在多重继承中,子类将有多个父类。子类创建的对象可以访问在所有父类中定义的方法。在上面的代码中,让我们再添加一个称为循环的类。这里,在CAR类中定义GET_CODE和GET_PRECT方法,在Trike类中定义GET_COLD和GET_YOYE方法。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)class Trike():

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)class Cycle(Car,Trike):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Trike1 = Trike("GHJ",90,"Grey",2020)

Trike2 = Trike("DFG",80,"Violet",2019)Cycle1 = Cycle("WER",30,"RED",2020)Cycle1.get_company()

Cycle1.get_color()

输出量

WER

RED

多级继承

多级继承是一种继承类型,在这种继承中,子类被用作另一个子类的父类。子类可以访问其父类的父类的方法。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)class Trike(Car):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearclass Cycle(Trike):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Trike1 = Trike("GHJ",90,"Grey",2020)

Trike2 = Trike("DFG",80,"Violet",2019)Cycle1 = Cycle("WER",30,"RED",2020)Cycle1.get_company()

Cycle1.get_color()

输出量

WER

RED

层次继承

如果多个子代具有相同的父级,则这种继承类型称为分层继承。使用相同父级创建的所有子级都可以从类继承。

class Car:

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = year

 def get_speed(self):

 print(self.speed)

 def get_company(self):

 print(self.company)

 def get_color(self):

 print(self.color)

 def get_year(self):

 print(self.year)class Trike(Car):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearclass Cycle(Car):

 def __init__(self,company,speed,color,year):

 self.company = company

 self.speed = speed

 self.color = color

 self.year = yearCar1 = Car("ABC",125,"RED",2019)

Car2 = Car("XYZ",150,"BLUE",2020)

Car3 = Car("LMN",200,"YELLOW",2020)Trike1 = Trike("GHJ",90,"Grey",2020)

Trike2 = Trike("DFG",80,"Violet",2019)Cycle1 = Cycle("WER",30,"RED",2020)Trike1.get_company()

Cycle1.get_color()

输出量

GHJ

RED

杂交遗传

混合继承在一个程序中包含各种类型的继承。尝试自己构建一个具有混合继承的程序。

开课吧Python培训拥有四大特色,门槛低、不吃力、应用强、专业高,你将掌握Python这门编程语言,实现自动化办公,减少重复劳动,熟练处理各种海量数据,将数据可视化呈现。投身开课吧,将是您智慧的选择!

Python的发展前景还是很可观的,有对Python感兴趣的同学就赶快学习起来吧。以上就是小编今天为大家整理发布的“Python教程:Python中实现多进程与多线程”一文,希望为正在学习Python的朋友提供学习参考,更多Python教程尽在开课吧广场Python教程频道!

上一篇:你知道吗?异步爬虫的速度早就超过同步爬虫啦!下一篇:Python面向对象编程基础,你学会了吗?

最新文章

文章图0

关于Python多行注释与单行注释的用法全在这了

注释用于向用户提示或解释某些代码的功能和作用,可以出现在代码的任何地方。在执行代码时,Python解释器将忽略注释,而不对其进行处理,就像它不存在一样。

2021-03-05 19:02:35

文章图1

只需5分钟,就可让Python脚本变为Windows应用!

Python教程本身是一个解释型的语言,其运行要依赖于在系统里安装的各个基础包和安装上的包,或者是动态链接库。

2021-03-05 18:54:42

文章图2

使用Python中的os模块快速删除文件

如果你想用Python删除windows中的文件,需要在这里使用os模块!然后我们来看看怎么用os模块删除文件!

2021-03-05 18:46:30

文章图3

这份Python办公自动化秘籍一定要收好,会提升你工作的幸福感!

在日常工作中,经常需要批量处理文件,遇到处理步骤比较繁琐的文件,很多刚入职场的同学完全没有头绪,不知该从何下手,只好找百度帮忙。今天为大家介绍10个Python最常用到的文件操作,都是采用内置函数实现的,相信一定会对大家有所帮助。

2021-03-05 18:25:46

文章图4

学会用Python自动生成数据分析报告,保你每天准时下班!

在日常工作中,我们经常在做很多重复性的工作,例如:月初的数据分析报告,几乎就是按照固定的模板填充内容,如果每次都手动去做这个事情,不仅浪费时间,对我们的职场成长益处也不大,不如用Python来自动生成数据分析报告,这样就可以腾出更多精力和时间去做更有意义的事情。

2021-03-04 19:10:38