Python语言设计之初,就是为了面向对象。所以Python的面向对象更加易于理解。如果你以前学过Java、C++你大概就懂得什么是面向对象,但如果你是第一门编程语言就选择Python,那么也不要害怕。这篇文章,我们将会尽量详细的讲解,把Python面向对象编程的知识讲清楚。
接下来我们先来简单的了解下面向对象的一些基本特征。
1. 什么是面向对象编程(OOP)?
面向对象编程(Object-Oriented Programming,OOP)是一种程序设计范式,它以对象为中心,将数据和操作数据的方法(函数)组合到一个单元中,这个单元就是对象。每个对象都是类的一个实例,而类则定义了对象的属性(数据)和方法(代码)。换句话说,面向对象编程将现实世界中的实体抽象为程序中的对象,这些对象可以相互交互、传递消息,并且可以继承和扩展。
面向对象编程通常具有以下几个核心概念:
- 类(Class):定义了对象的模板,包括数据和方法。
- 对象(Object):类的实例,具有特定的属性和方法。
- 封装(Encapsulation):将数据(属性)和操作数据的方法(函数)封装到对象中,使得对象的内部细节对外部不可见。
- 继承(Inheritance):允许一个类(子类)继承另一个类(父类)的属性和方法,并且可以添加自己的特定属性和方法。
- 多态(Polymorphism):允许不同类的对象对同一个方法做出不同的响应,提高代码的灵活性和可重用性。
很好,上面的概念,你已经云里雾里了。那么下面我们简单来讲一下。
一个简单的例子:
假设我们要模拟一个动物园中的动物。我们可以使用定义一个 Animal
(动物)类,并创建具体的动物对象。这就是面向对象编程的两个概念了,类、对象。
# 定义 Animal(动物)类
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def make_sound(self):
pass
# 定义具体的动物类:猫(Cat)和狗(Dog)
class Cat(Animal):
def make_sound(self):
return "Meow"
class Dog(Animal):
def make_sound(self):
return "Woof"
# 创建动物对象
cat1 = Cat("Kitty", 3)
dog1 = Dog("Buddy", 5)
# 调用动物对象的方法
print(cat1.name, "says:", cat1.make_sound()) # 输出:Kitty says: Meow
print(dog1.name, "says:", dog1.make_sound()) # 输出:Buddy says: Woof
上面的代码,我们一步步来说:
第一步:首先定义了一个 Animal
(动物)类,它有两个属性 name
(名字)和 age
(年龄)。在 __init__
构造函数中,我们初始化了这两个属性。
第二步:Animal
类有一个 make_sound
(发出声音)方法,但在基类中我们只定义了方法的签名,没有具体的实现。这是因为我们无法确定所有动物的叫声,具体的叫声会在子类中实现。
第三步:然后我们定义了两个具体的动物类 Cat
(猫)和 Dog
(狗),它们都继承自 Animal
类。这意味着 Cat
和 Dog
类会继承 Animal
类的属性和方法,并且可以根据需要添加自己的属性和方法。
第四步:在 Cat
类和 Dog
类中,我们重写了 make_sound
方法,分别返回了猫和狗的叫声
第五步:最后,我们创建了两个具体的动物对象 cat1
和 dog1
,分别是一只名叫 "Kitty" 的猫和一只名叫 "Buddy" 的狗。
第六步:我们调用了这两个动物对象的 make_sound
方法,并打印出它们的名字和叫声。
上面总共讲了6步,6步里面涉及到了:类(Class)、对象(Object)、封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。这些概念,具体怎么看呢?往下看:
- 类:
Animal
、Cat
、Dog
分别是类,它们定义了对象的模板,包括属性和方法。 - 对象:
cat1
和dog1
是Cat
和Dog
类的对象,它们是具体的实例,具有特定的属性和方法。 - 封装:每个动物对象封装了自己的属性
name
和age
,并且调用了自己的make_sound
方法。 - 继承:
Cat
和Dog
类继承了Animal
类的属性和方法,避免了重复定义。 - 多态:
make_sound
方法在不同的子类中表现出不同的行为,根据对象的类型返回不同的叫声。
那么,你现在将这些概念,一个个对应到前面的六步中去,你就大概明白了。明白个大概也行!
下面接着讲.......
2. 类和对象
让我们以一个仍然用上面的例子来说明什么是类和对象。我们创建了一个"动物"(Animal)类,然后创建该类的对象,比如"狗"(Dog)和"猫"(Cat)。
2.1 类的定义和创建
我们可以定义一个"动物"(Animal)类,该类具有一些基本属性(如名称和年龄),以及一些行为(如发出声音)。
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age
def make_sound(self):
pass # 此处留空,因为这是一个抽象的动作,每种动物发出的声音不同,后续会在子类中实现
在这个类中,我们定义了一个构造函数 __init__()
,它接收 name
和 age
作为参数,并将它们分配给对象的属性。我们还定义了一个 make_sound()
方法,但目前它什么也不做,因为每种动物发出的声音都不同,所以我们会在子类中覆盖这个方法。
2.2 对象的创建和使用
现在,让我们创建具体的动物对象,比如一个狗对象和一个猫对象,并使用它们的属性和方法。
class Dog(Animal):
def make_sound(self):
return "Woof!"
class Cat(Animal):
def make_sound(self):
return "