跳到主要内容

Python 面向对象编程

提示
  1. Python面向对象编程:使用类和对象实现易于理解和高效的代码,支持封装、继承和多态等核心概念。
  2. 类和对象的使用:类作为对象的蓝图,对象是类的实例,具有属性和行为。
  3. 继承、封装和多态:继承允许创建新类而无需修改现有类;封装保护数据并隐藏细节;多态让同一接口适用于多种数据类型。

Python是一种多功能的编程语言,支持包括通过对象使用的面向对象编程(OOP)在内的各种编程风格。

对象是具有属性行为的任何实体。例如,parrot是一个对象。它有

  • 属性 - 名称、年龄、颜色等。
  • 行为 - 跳舞、唱歌等。

同样地,类是该对象的蓝图。

Python类和对象

class Parrot:
# 类属性
name = ""
age = 0

# 创建parrot1对象
parrot1 = Parrot()
parrot1.name = "Blu"
parrot1.age = 10

# 创建另一个对象parrot2
parrot2 = Parrot()
parrot2.name = "Woo"
parrot2.age = 15

# 访问属性
print(f"{parrot1.name} 今年 {parrot1.age} 岁")
print(f"{parrot2.name} 今年 {parrot2.age} 岁")

输出

Blu 今年 10
Woo 今年 15

在上面的例子中,我们创建了一个名为Parrot的类,它有两个属性:名称和年龄。

然后,我们创建Parrot类的实例。这里,parrot1和parrot2是对我们新对象的引用(值)。

我们然后使用对象名称和.符号访问并分配不同的值给实例属性。

要了解更多关于类和对象,请访问 Python类和对象

Python继承

继承是一种用于使用现有类的细节创建新类的方法,无需修改它。

新形成的类是一个派生类(或子类)。同样,现有的类是基类(或父类)。

示例2:在Python中使用继承

# 基类
class Animal:

def eat(self):
print("我能吃!")

def sleep(self):
print("我能睡!")

# 派生类
class Dog(Animal):

def bark(self):
print("我能叫!汪汪!!")

# 创建Dog类的对象
dog1 = Dog()

# 调用基类的成员
dog1.eat()
dog1.sleep()

# 调用派生类的成员
dog1.bark();

输出

我能吃!
我能睡!
我能叫!汪汪!!

这里,dog1(派生类Dog的对象)可以访问基类Animal的成员。这是因为Dog继承自Animal。

# 调用Animal类的成员
dog1.eat()
dog1.sleep()

要了解更多关于继承,请访问 Python继承

Python封装

封装是面向对象编程的关键特性之一。封装指的是将属性和方法封装在单个类中。

它阻止外部类访问和更改类的属性和方法。这也有助于实现数据隐藏

在Python中,我们使用下划线作为前缀表示私有属性,即单个_或双__。例如,

class Computer:

def __init__(self):
self.__maxprice = 900

def sell(self):
print("售价:{}".format(self.__maxprice))

def setMaxPrice(self, price):
self.__maxprice = price

c = Computer()
c.sell()

# 更改价格
c.__maxprice = 1000
c.sell()

# 使用setter函数
c.setMaxPrice(1000)
c.sell()

输出

售价:900
售价:900
售价:1000

在上面的程序中,我们定义了一个Computer类。

我们使用了__init__()方法来存储Computer的最高售价。请注意以下代码

c.__maxprice = 1000

在这里,我们试图在类外部修改maxprice的值。然而,由于maxprice是一个私有变量,这种修改在输出上看不到。

如所示,要更改值,我们必须使用setter函数,即setMaxPrice(),它以价格作为参数。

多态

多态是面向对象编程的另一个重要概念。它简单地意味着多种形态。

即,同一实体(方法、操作符或对象)在不同场景中可以执行不同的操作。

让我们看一个例子,

class Polygon:
# 方法渲染一个形状
def render(self):
print("渲染多边形...")

class Square(Polygon):
# 渲染正方形
def render(self):
print("渲染正方形...")

class Circle(Polygon):
# 渲染圆形
def render(self):
print("渲染圆形...")

# 创建Square的对象
s1 = Square()
s1.render()

# 创建Circle的对象
c1 = Circle()
c1.render()

输出

渲染正方形...
渲染圆形...

在上面的例子中,我们创建了一个超类:Polygon和两个子类:Square和Circle。注意render()方法的使用。

render()方法的主要目的是渲染形状。然而,渲染正方形的过程与渲染圆形的过程不同。

因此,在不同的类中,render()方法表现不同。或者,我们可以说render()是多态的。

记住的关键点:

  • 面向对象编程使程序易于理解并且高效。
  • 由于类是可共享的,代码可以被重用。
  • 数据通过数据抽象安全且保密。
  • 多态允许不同对象的相同接口,因此程序员可以编写高效代码。