Python 面向对象编程
- Python面向对象编程:使用类和对象实现易于理解和高效 的代码,支持封装、继承和多态等核心概念。
- 类和对象的使用:类作为对象的蓝图,对象是类的实例,具有属性和行为。
- 继承、封装和多态:继承允许创建新类而无需修改现有类;封装保护数据并隐藏细节;多态让同一接口适用于多种数据类型。
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()
是多态的。
记住的关键点:
- 面向对象编程使程序易于理解并且高效。
- 由于类是可共享的,代码可以被重用。
- 数据通过数据抽象安全且保密。
- 多态允许不同对象的相同接口,因此程序员可以编写高效代码。