Python 面向对象学习笔记

什么是面向对象编程?

面向对象编程(Object Oriented Programming,简称 OOP)是一种编程思维方式,它将现实世界中的事物抽象成对象,并通过对象之间的交互来完成程序的设计和实现。在 Python 中,一切都是对象,每个对象都有自己的属性和方法。

类和对象

类是一种抽象的数据类型,用来描述具有相同属性和方法的对象的集合。类定义了对象的基本特征,包括对象的属性和方法。对象是类的一个实例,拥有类定义的属性和方法。

在 Python 中,使用 class 关键字来定义一个类。例如:

pythonCopy Code
class Dog: def __init__(self, name, age): self.name = name self.age = age def bark(self): print(f"{self.name} is barking!")

上面的代码定义了一个 Dog 类,这个类有两个属性 nameage,以及一个方法 bark。下面是如何创建 Dog 的实例:

pythonCopy Code
my_dog = Dog("Buddy", 3) print(my_dog.name) # 输出 "Buddy" print(my_dog.age) # 输出 3 my_dog.bark() # 输出 "Buddy is barking!"

我们创建了一个名为 my_dogDog 对象,并使用 . 运算符来访问它的属性和方法。

继承

继承是 OOP 中一个重要的概念,它允许我们创建一个新类,而这个新类继承了现有类的属性和方法。被继承的类称为父类或基类,新创建的类称为子类或派生类。

在 Python 中,可以使用以下语法来实现继承:

pythonCopy Code
class ChildClass(ParentClass): ...

例如,我们可以创建一个名为 Poodle 的子类,它从 Dog 类继承了属性和方法:

pythonCopy Code
class Poodle(Dog): def __init__(self, name, age, haircut): super().__init__(name, age) self.haircut = haircut def bark(self): print(f"{self.name} is barking like a poodle!") def show_haircut(self): print(f"{self.name} has a {self.haircut} haircut.")

上面的代码定义了一个 Poodle 类,这个类从 Dog 类继承了 nameage 属性,以及 bark 方法。此外,Poodle 类还有一个 haircut 属性和一个 show_haircut 方法。下面是如何创建 Poodle 对象并调用它的方法:

pythonCopy Code
my_poodle = Poodle("Gigi", 2, "puppy cut") print(my_poodle.name) # 输出 "Gigi" print(my_poodle.age) # 输出 2 print(my_poodle.haircut) # 输出 "puppy cut" my_poodle.bark() # 输出 "Gigi is barking like a poodle!" my_poodle.show_haircut() # 输出 "Gigi has a puppy cut haircut."

多态

多态是 OOP 另一个重要的概念,它允许我们使用相同的方法名来调用不同的对象。在 Python 中,多态是通过“鸭子类型”来实现的,即只要对象具有特定的属性和方法,就可以被认为是某个类的实例。

例如,我们可以定义一个函数 introduce,它可以接受任何有 name 属性的对象,并输出它们的名字:

pythonCopy Code
def introduce(obj): print(f"My name is {obj.name}.") my_dog = Dog("Buddy", 3) my_poodle = Poodle("Gigi", 2, "puppy cut") introduce(my_dog) # 输出 "My name is Buddy." introduce(my_poodle) # 输出 "My name is Gigi."

上面的代码中,introduce 函数接受一个参数 obj,并假定该对象具有 name 属性。因此,我们可以使用相同的函数来介绍 DogPoodle 对象,尽管它们属于不同的类。

总结

面向对象编程是一种强大的编程思想,在 Python 中得到了广泛应用。通过类和对象、继承和多态等机制,我们可以更加清晰地组织和管理程序的代码,使其更易于理解、扩展和维护。