Python 面向对象编程

Python 是一种支持多种编程风格的通用编程语言,包括通过使用 **对象** 和 **类** 来支持面向对象编程(OOP)。

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

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

类似地,类是该对象的蓝图。


Python 类和对象

class Parrot:

    # class attribute
    name = ""
    age = 0

# create parrot1 object
parrot1 = Parrot()
parrot1.name = "Blu"
parrot1.age = 10

# create another object parrot2
parrot2 = Parrot()
parrot2.name = "Woo"
parrot2.age = 15

# access attributes
print(f"{parrot1.name} is {parrot1.age} years old")
print(f"{parrot2.name} is {parrot2.age} years old")

输出

Blu is 10 years old
Woo is 15 years old

在上面的示例中,我们创建了一个名为 `Parrot` 的类,它有两个属性:`name` 和 `age`。

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

然后,我们使用对象名和 `.` 符号访问和赋值实例属性的不同值。

要了解有关类和对象的更多信息,请访问 Python 类和对象


Python 继承

继承是一种创建新类的方式,可以利用现有类的详细信息而不修改它。

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

示例 2:Python 中继承的使用

# base class
class Animal:
    
    def eat(self):
        print( "I can eat!")
    
    def sleep(self):
        print("I can sleep!")

# derived class
class Dog(Animal):
    
    def bark(self):
        print("I can bark! Woof woof!!")

# Create object of the Dog class
dog1 = Dog()

# Calling members of the base class
dog1.eat()
dog1.sleep()

# Calling member of the derived class
dog1.bark();

输出

I can eat!
I can sleep!
I can bark! Woof woof!!

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

# Calling members of the Animal class
dog1.eat()
dog1.sleep()

要了解有关继承的更多信息,请访问 Python 继承


Python 封装

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

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

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

class Computer:

    def __init__(self):
        self.__maxprice = 900

    def sell(self):
        print("Selling Price: {}".format(self.__maxprice))

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

c = Computer()
c.sell()

# change the price
c.__maxprice = 1000
c.sell()

# using setter function
c.setMaxPrice(1000)
c.sell()

输出

Selling Price: 900
Selling Price: 900
Selling Price: 1000

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

我们使用 `__init__()` 方法来存储 `Computer` 的最高售价。这里,请注意代码

c.__maxprice = 1000

在这里,我们试图修改类外部的 `__maxprice` 的值。但是,由于 `__maxprice` 是私有变量,此修改在输出中未显示。

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


多态

多态是面向对象编程的另一个重要概念。它仅仅意味着一种以上形式。

也就是说,同一个实体(方法、运算符或对象)可以在不同场景下执行不同的操作。

让我们看一个例子,

class Polygon:
    # method to render a shape
    def render(self):
        print("Rendering Polygon...")

class Square(Polygon):
    # renders Square
    def render(self):
        print("Rendering Square...")

class Circle(Polygon):
    # renders circle
    def render(self):
        print("Rendering Circle...")
    
# create an object of Square
s1 = Square()
s1.render()

# create an object of Circle
c1 = Circle()
c1.render()

输出

Rendering Square...
Rendering Circle...

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

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

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

要了解有关多态的更多信息,请访问 Python 中的多态


要记住的要点

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

另请阅读

视频:Python 面向对象编程

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战