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 中的多态。
要记住的要点
- 面向对象编程使程序易于理解且高效。
- 由于类是可共享的,因此代码可以重用。
- 数据通过数据抽象是安全且有保障的。
- 多态为不同对象提供了相同的接口,因此程序员可以编写高效的代码。
另请阅读