上一章Python教程请查看:python3自定义异常
在本文中,你将通过示例了解Python中的面向对象编程(OOP)及其基本概念。
Python中的OOP面向对象编程介绍Python是一种多范式编程语言,也就是说,它支持不同的编程方法。
解决编程问题的流行方法之一是创建对象,这就是所谓的面向对象编程(OOP)。
一个对象有两个特征:
- 属性
- 行为
Parrot是一个对象:
- 姓名、年龄、颜色都是属性
- 唱歌、跳舞都是行为
在Python中,OOP的概念遵循一些基本原则:
继承 | 使用新类的细节而不修改现有类的过程。 |
封装 | 对其他对象隐藏类的私有细节。 |
多态性 | 对不同的数据输入以不同的方式使用通用操作的概念。 |
我们可以把类想象成一只带着标签的鹦鹉,它包含了名字、颜色、大小等所有细节,根据这些描述,我们可以研究鹦鹉,在这里,parrot是一个对象。
parrot类的例子可以是:
class Parrot:
pass
在这里,我们使用class关键字来定义一个空类Parrot,我们从类中构造实例,实例是由特定类创建的特定对象。
对象object对象(实例)是类的实例化,在定义类时,只定义对象的描述,因此,不分配内存或存储。
parrot类对象的例子可以是:
obj = Parrot()
在这里,obj是Parrot类的对象。
假设我们有关于parrot的详细信息,现在,我们将展示如何构建parrot的类和对象。
例1:在Python中创建类和对象
class Parrot:# 类属性
species = "bird"# 初始化属性
def __init__(self, name, age):
self.name = name
self.age = age# 实例化Parrot类
bb = Parrot("BBB", 10)
ww = Parrot("WWW", 15)# 访问类属性
print("BBB is a {}".format(bb.__class__.species))
print("WWW is also a {}".format(ww.__class__.species))# 访问属性
print("{} is {} years old".format( bb.name, blu.age))
print("{} is {} years old".format( ww.name, woo.age))
在上面的程序中,我们创建了一个名为Parrot的类,然后,我们定义属性,属性是对象的特征。
然后,我们创建Parrot类的实例,这里,bb和ww是对新对象的引用(值)。
然后,我们使用_class_.species访问class属性,类的所有实例的类属性都是相同的。类似地,我们使用blu.name和blu.age访问实例属性。但是,对于类的每个实例,实例属性都是不同的。
方法方法是在类的主体中定义的函数,它们用于定义对象的行为。
例2:在Python中创建方法
class Parrot:# 属性
def __init__(self, name, age):
self.name = name
self.age = age# 方法
def sing(self, song):
return "{} sings {}".format(self.name, song)def dance(self):
return "{} is now dancing".format(self.name)# 对象
blu = Parrot("Blu", 10)# 调用方法
print(blu.sing("'Happy'"))
print(blu.dance())
在上面的程序中,我们定义了两个方法sing()和dance(),这些被称为实例方法,因为它们是在实例对象上调用的。
继承继承是一种创建新类的方法,用于在不修改现有类的细节的情况下使用它,形成的类是一个派生类(或子类),类似地,现有类是基类(或父类)。
例3:Python中使用继承
# 父类
class Bird:def __init__(self):
print("Bird is ready")def whoisThis(self):
print("Bird")def swim(self):
print("Swim faster")# 子类
class Penguin(Bird):def __init__(self):
# call super() function
super().__init__()
print("Penguin is ready")def whoisThis(self):
print("Penguin")def run(self):
print("Run faster")peggy = Penguin()
peggy.whoisThis()
peggy.swim()
peggy.run()
在上面的程序中,我们创建了两个类:Bird(父类)和Penguin(子类)。子类继承父类的函数,我们可以从swim()方法中看到这一点,同样,子类修改了父类的行为。我们可以从whoisThis()方法中看到这一点,此外,通过创建一个新的run()方法,我们扩展了父类的功能。
此外,我们在使用_init__()方法之前使用了super()函数,这是因为我们希望将_init__()方法的内容从父类拉到子类中。
封装在Python中使用OOP,我们可以限制对方法和变量的访问,这就防止了数据被称为封装的直接修改。在Python中,我们使用下划线作为前缀来表示私有属性也就是单“_”或双“__”。
例4:Python中的数据封装
class Computer:def __init__(self):
self.__maxprice = 900def sell(self):
print("Selling Price: {}".format(self.__maxprice))def setMaxPrice(self, price):
self.__maxprice = pricec = Computer()
c.sell()c.__maxprice = 1000
c.sell()# 使用 setter 函数
c.setMaxPrice(1000)
c.sell()
在上面的程序中,我们定义了一个类计算机,我们使用_init__()方法来存储计算机的最高销售价格。我们试图修改价格,但是,我们不能更改它,因为Python将_maxprice作为私有属性对待。要更改值,我们使用setter函数也就是setMaxPrice()以price为参数。
多态性多态性是(在OOP中)为多个表单(数据类型)使用公共接口的能力。
假设,我们需要给一个形状上色,有多个形状选项(矩形、正方形、圆形),然而,我们可以用同样的方法来着色任何形状,这个概念称为多态性。
例5:在Python中使用多态性
class Parrot:def fly(self):
print("Parrot can fly")def swim(self):
print("Parrot can't swim")class Penguin:def fly(self):
print("Penguin can't fly")def swim(self):
print("Penguin can swim")# 通用接口
def flying_test(bird):
bird.fly()blu = Parrot()
peggy = Penguin()flying_test(blu)
flying_test(peggy)
在上面的程序中,我们定义了Parrot和Penguin两个类,它们都有通用的方法fly()方法。然而,它们的功能是不同的,为了允许多态性,我们创建了通用接口i。函数的作用是:获取任何对象。然后,我们在flying_test()函数中传递对象blu和peggy,它会有效地运行。
注意事项:
- 编程变得简单而高效。
- 该类是可共享的,因此可以重用代码。
- 程序的生产率提高了
- 通过数据抽象,数据是安全的。
推荐阅读
- python3对象和类 – Python3教程
- java|程序员加班实用贴 | 每日趣闻
- 人工智能|GPT-3(现实版的“贾维斯”(还是真“人工”智能?))
- 人工智能|复旦博士生写了130行代码,用OCR和正则表达式快速搞定核酸报告统计!
- java|复旦博士写了130行代码,2分钟解决繁琐核酸报告核查
- python3自定义异常 – Python3教程
- python3异常处理(try,except和finally – Python3教程)
- python3错误和内置异常 – Python3教程
- python3目录和文件管理 – Python3教程