什么是Python面向对象编程的基础
Python面向对象编程(OOPs)范式使用对象和类。它旨在将继承、多态、封装等真实世界概念融入编程中。OOPs的基本思想是将数据和使用数据的函数绑定起来,以使代码的其他部分无法访问该数据。
在本文中,我们将讨论面向对象编程的基本原则。
类
类的定义是一组项目。它是一个逻辑实体,具有一些独特的属性和方法。例如,如果您有一个用于板球的类,它应该具有诸如运动员、比赛、掷硬币、得分、击球、比赛等属性和方法。
示例
请使用下面的示例构建一个名为 Cricket 的类,该类具有两个字段: player id 和 player 。该类还具有一个名为 display() 的函数,用于显示 Cricket 信息-
class Cricket:
id = 10
player = "Sachin Tendulkar"
def display (self):
print(self.id,self.player)
print('Class created Successfully')
输出
以下是上述代码的输出
Class created Successfully
对象
对象是一个类的实例。它是一个具有状态和行为的实体。简而言之,它是一个具有访问数据权限的类实例。它可以是任何现实世界的对象,比如鼠标、键盘、椅子、桌子、笔等等。
Python将所有东西都视为对象,大多数对象都有属性和方法。所有函数的内置属性 __doc__ 返回函数源代码中指定的文档字符串。
示例
以下是创建一个对象的示例:
class Cricket:
id = 10
player = "Sachin Tendulkar"
def display (self):
print("ID: %d \nPlayer: %s"%(self.id,self.player))
# Create crkt instance of Cricket class
crkt = Cricket()
crkt.display()
输出
以下是上述代码的输出:
ID: 10
Player: Sachin Tendulkar
方法
与对象相关联的一个函数就是方法。在Python中,并非只有类实例才能有方法,任何类型的对象都可以拥有方法。
示例
在下面的示例中,定义了两个方法 plant() 和 animals() 。因为 Pen 是一个实例对象,所以它们被称为实例方法。
class Program:
# The instance attributes
def __init__(self, name, age):
self.name = name
self.age = age
# The instance method
def plant(self, eucalyptus):
return "{} plants {}".format(self.name, eucalyptus)
def animals(self):
return "{} animals".format(self.name)
# instantiating the object
Pen = Program("Pen", 10)
# calling the instance methods
print(Pen.plant("'Coding'"))
print(Pen.animals())
输出
以下是上述代码的输出结果−
Pen plants 'Coding'
Pen animals
继承
通过利用现有类的细节而不改变它,可以通过继承创建一个新类。新创建的类是一个派生类(或子类)。现有的类以类似的方式是一个基类(或父类)。
例子
以下是Python中继承的一个例子
# The parent class
class Animal:
def __init__(self):
print("Animal is there")
def WhatIstheClass(self):
print("Animal")
def Run(self):
print("Runs in speed")
# The child class
class Lion(Animal):
def __init__(self):
# call super() function
super().__init__()
print("Lion is there")
def WhatIstheClass(self):
print("Lion")
def run(self):
print("Runs in speed")
blu = Lion()
blu.WhatIstheClass()
blu.Run()
blu.run()
输出
在上面的代码中,我们建立了两个类:Animal(父类)和Lion(子类)。子类继承了父类的函数,这从Run()方法中可以看出。
同样,子类修改了父类的行为。通过 WhatIstheClass() 方法可以看出这一点。通过添加一个新的run()方法,我们还扩展了父类的功能。
在 __init__() 方法中,我们还使用了 super() 函数。这使我们能够从子类调用父类的 __init__() 方法。
Animal is there
Lion is there
Lion
Runs in speed
Runs in speed
封装
我们可以通过使用面向对象编程来限制对Python中方法和变量的访问。封装是防止直接修改数据的过程。在Python中,我们使用下划线前缀来表示私有属性,例如single_或double__。
示例
以下是Python中数据封装的示例:
class Sports:
def __init__(self):
self.__sportsName = "Cricket"
def game(self):
print("The game is: {}".format(self.__sportsName))
def Player_Name(self, player):
self.__sportsName = player
s = Sports()
s.game()
# changing the sports name
s.__sportsName = 'Hockey'
s.game()
# using the setter function
s.Player_Name('Hockey')
s.game()
输出
在上面的代码中定义了Sports类。运动的游戏名称是通过init()方法存储的。看一下下面的代码。
s.__sportsName = 'Hockey'
在这里,我们尝试在类外部更改 __sportsName 的值。由于 __sportsName 是一个私有变量,输出结果不会反映这个修改。我们必须使用一个setter函数,Player Name() ,它接受 sportsName作为参数,以调整这个值。
The game is: Cricket
The game is: Cricket
The game is: Hockey
多态
“Poly”和”morph”是组成多态的两个词。Poly和morp分别表示”许多”和”形状”。我们理解多态是指可以以多种方式执行单个活动。
假设我们想要给一个形状上色;我们有各种形状可选(正方形、五边形、圆形)。然而,我们可以使用相同的方法给任何形状上色。这个概念被称为多态。
例子
下面是Python中多态的一个例子。
class Lion:
def Roar(self):
print("Lion can roar")
def Bark(self):
print("Lion can't bark")
class Dog:
def Roar(self):
print("Dog can't roar")
def Bark(self):
print("Dog can bark")
# same qualities
def sound_test(mammal):
mammal.Roar()
#instantiate objects
pet = Lion()
street = Dog()
# passing the object
sound_test(pet)
sound_test(street)
输出
在上述代码中定义了两个类, Lion 和 Dog 。它们都共享 Roar() 方法,但它们的角色是不同的。
为了利用多态性,我们建立了一个称为sound的公共接口,它接受任何对象并调用其 Roar() 方法。结果是,当我们将pet和street对象传递给它时,sound的 test() 函数按预期工作。
Lion can roar
Dog can't roar
数据抽象
数据抽象和封装经常被使用作为同义词。由于数据抽象是通过封装实现的,这两个术语几乎是同义词。
使用抽象时,内部细节被隐藏,只显示功能。给事物命名以捕捉函数或整个程序所做的核心的过程就是将某些东西抽象化。