Python 面向对象学习笔记
什么是面向对象编程?
面向对象编程(Object Oriented Programming,简称 OOP)是一种编程思维方式,它将现实世界中的事物抽象成对象,并通过对象之间的交互来完成程序的设计和实现。在 Python 中,一切都是对象,每个对象都有自己的属性和方法。
类和对象
类是一种抽象的数据类型,用来描述具有相同属性和方法的对象的集合。类定义了对象的基本特征,包括对象的属性和方法。对象是类的一个实例,拥有类定义的属性和方法。
在 Python 中,使用 class
关键字来定义一个类。例如:
pythonCopy Codeclass Dog:
def __init__(self, name, age):
self.name = name
self.age = age
def bark(self):
print(f"{self.name} is barking!")
上面的代码定义了一个 Dog
类,这个类有两个属性 name
和 age
,以及一个方法 bark
。下面是如何创建 Dog
的实例:
pythonCopy Codemy_dog = Dog("Buddy", 3)
print(my_dog.name) # 输出 "Buddy"
print(my_dog.age) # 输出 3
my_dog.bark() # 输出 "Buddy is barking!"
我们创建了一个名为 my_dog
的 Dog
对象,并使用 .
运算符来访问它的属性和方法。
继承
继承是 OOP 中一个重要的概念,它允许我们创建一个新类,而这个新类继承了现有类的属性和方法。被继承的类称为父类或基类,新创建的类称为子类或派生类。
在 Python 中,可以使用以下语法来实现继承:
pythonCopy Codeclass ChildClass(ParentClass):
...
例如,我们可以创建一个名为 Poodle
的子类,它从 Dog
类继承了属性和方法:
pythonCopy Codeclass 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
类继承了 name
和 age
属性,以及 bark
方法。此外,Poodle
类还有一个 haircut
属性和一个 show_haircut
方法。下面是如何创建 Poodle
对象并调用它的方法:
pythonCopy Codemy_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 Codedef 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
属性。因此,我们可以使用相同的函数来介绍 Dog
和 Poodle
对象,尽管它们属于不同的类。
总结
面向对象编程是一种强大的编程思想,在 Python 中得到了广泛应用。通过类和对象、继承和多态等机制,我们可以更加清晰地组织和管理程序的代码,使其更易于理解、扩展和维护。