Python面向对象编程基础是什么?
Python编程范式中,面向对象编程(OOPs)利用对象和类来使编程具备实现继承、多态、封装等现实世界概念的能力。OOPs背后的基本理念是将数据和使用数据的函数绑定起来,以使代码中的任何其他部分无法访问它。
本文将讨论面向对象编程的基本原则。
更多Python相关文章,请阅读:Python 教程
类
类的定义是一组项。它是一个具有少量独特属性和方法的逻辑实体。例如,如果你有一个关于板球的类,则应该具有players、tournaments、toss、runs、wickets、matches等属性和方法。
实例
请使用下面的示例构造一个名为Cricket的类,该类具有两个字段:player id和player。该类还有一个名为display()的函数,用于显示板球信息 −
class Cricket:
id = 10
player = "Sachin Tendulkar"
def display (self):
print(self.id,self.player)
print('Class created Successfully')
输出
以下是上述代码的输出
Class created Successfully
对象
对象是类的一个实例。它是具有状态和行为的实体。简而言之,它是具有访问数据权限的类实例。它可以是任何实际的物体,例如鼠标、键盘、椅子、桌子、笔等。
Python将所有东西都视为对象,并且大多数对象都具有属性和方法。所有函数的内置属性doc都返回函数源代码中指定的docstring。
实例
以下是创建对象的示例 −
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:
# 实例属性
def __init__(self, name, age):
self.name = name
self.age = age
# 实例方法
def plant(self, eucalyptus):
return "{} 种植 {}".format(self.name, eucalyptus)
def animals(self):
return "{} 动物".format(self.name)
# 实例化对象
Pen = Program("Pen", 10)
# 调用实例方法
print(Pen.plant("'Coding'"))
print(Pen.animals())
输出
上述代码的输出如下−
Pen 种植 'Coding'
Pen 动物
继承
通过继承利用现有类的细节而不改变它,可以创建一个新类。 新创建的类是一个派生类(或子类)。 与之类似,现有类被称为基类(或父类)。
例子
以下是 Python 中继承的示例
# 父类
class Animal:
def __init__(self):
print("Animal在这里")
def WhatIstheClass(self):
print("动物")
def Run(self):
print("以速度奔跑")
# 子类
class Lion(Animal):
def __init__(self):
# 调用super()函数
super().__init__()
print("狮子在这里")
def WhatIstheClass(self):
print("狮子")
def run(self):
print("以速度奔跑")
blu = Lion()
blu.WhatIstheClass()
blu.Run()
blu.run()
输出
上述代码中我们建立了两个类:Animal(父类)和Lion(子类)。 子类继承了父类的函数。 这可以从 Run() 方法看出来。
同样,子类修改了父类的行为。 WhatIstheClass() 方法揭示了这一点。 通过添加新的 run() 方法,我们还扩展了父类的功能。
在init()方法中,我们也使用了super()函数。这使我们能够从子类中调用父类的init()方法。
动物在那里
狮子在那里
狮子
以速度奔跑
以速度奔跑
封装
通过使用OOP,我们可以限制在Python中访问方法和变量。封装是防止直接数据修改的过程。在Python中,我们使用下划线前缀指示私有属性,例如单个或双下划线。
例子
以下是Python中数据封装的示例−
class Sports:
def __init__(self):
self.__sportsName = "Cricket"
def game(self):
print("游戏是:{}".format(self.__sportsName))
def Player_Name(self, player):
self.__sportsName = player
s = Sports()
s.game()
# 改变运动名称
s.__sportsName = '曲棍球'
s.game()
# 使用设置器函数
s.Player_Name('篮球')
s.game()
输出
上面的代码定义了Sports类。Sports的游戏名称使用init()方法存储。看下面的代码
s.__sportsName = '曲棍球'
在这里,我们尝试在类外部更改__sportsName值。由于__sportsName是私有变量,输出不反映此修改。我们必须使用一个接受sportsName作为参数的setter函数Player Name()来调整值。
游戏是:板球
游戏是:板球
游戏是:曲棍球
多态
“Poly”和”morphs”是构成多态的两个单词。这些词组的意思分别为许多和形状。我们理解多态的含义是可以用多种方式执行单个活动。
假设我们想要为一种形状上色;我们有各种形状选择(正方形、五边形、圆形)。但是,我们可以使用相同的方法为任何形状上色。这个概念被称为多态。
例子
以下是Python中多态的示例
class Lion:
def Roar(self):
print("狮子会咆哮")
def Bark(self):
print("狮子不能吠叫")
class Dog:
def Roar(self):
print("狗不能咆哮")
def Bark(self):
print("狗会叫")
# 相同的特性
def sound_test(mammal):
mammal.Roar()
# 实例化对象
pet = Lion()
street = Dog()
# 传递对象
sound_test(pet)
sound_test(street)
输出
上面的代码定义了两个类 Lion 和 Dog,它们都共享 Roar() 方法。但是,它们的角色是不同的。
为了使用多态,我们构建了一个通用的接口,叫做 sound_test(),它接受任何对象并调用其 Roar() 方法。因此,当我们把 pet 和 street 对象传递给它时,sound_test() 函数按预期工作。
狮子会咆哮
狗不能咆哮
数据抽象
数据抽象和封装经常被用作同义词。由于数据抽象是通过封装来实现的,因此这两个术语几乎是同义词。
在使用抽象时,内部细节被隐藏,只显示功能。将事物命名为捕获一个函数或整个程序所做的核心的名称是抽象化的过程。