正如我在前几篇文章中提到的,编程是一门采用自然概念来解决我们周围问题的艺术。自然界中的一切都是物体。每个对象都有自己的行为和属性。面向对象编程是一种优秀的编程范式,它使我们能够在编程中创建虚拟对象,并具有一个称为类的公共蓝图。在本文中,我们将尝试理解面向对象编程的概念及其基本功能,如封装、抽象、继承和多态性。如果您是python编程语言的初学者,只需阅读前面的文章就可以了解一些基本的内容。
Object-oriented design is the roman numerals of computing.
如果您熟悉python中的基本内容,您可以进一步阅读以下概念。让我们看一看本文将要讨论的主题。
理解对象世界
在Python中创建类
如何在类下创建对象
构造方法的概念
对象的创建方法
使用封装使属性私有
在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:
passCar1 = 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 objectYou created a new objectYou 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 = yeardef 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()
输出量
XYZ150
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 = yeardef 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 = yeardef 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 = yeardef 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 = yeardef 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 = yeardef 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 = yeardef 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 = yeardef 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
杂交遗传
混合继承在一个程序中包含各种类型的继承。尝试自己构建一个具有混合继承的程序。
*声明:本文于网络整理,版权归原作者所有,如来源信息有误或侵犯权益,请联系我们删除或授权事宜。
觉得不错,点个“在看”然后转发出去