第9节 面向对象编程(OOP)
在这一节中,我们将深入探讨 Python 中的面向对象编程(Object-Oriented Programming, OOP)。面向对象编程是一种编程范式,它使用“对象”来设计软件。对象是类的实例,而类则是对象的蓝图。我们将学习如何定义类、创建对象、继承、多态等面向对象编程的核心概念。
9.1 类和对象
类是对象的蓝图,定义了对象的属性和方法。对象是类的实例,具有类定义的属性和方法。
定义类:
class ClassName:
def __init__(self, param1, param2):
self.param1 = param1
self.param2 = param2
def method1(self):
# 方法体
pass
def method2(self, arg1):
# 方法体
pass
创建对象:
obj = ClassName(value1, value2)
示例:
定义一个简单的类
Person
:class Person: def __init__(self, name, age): self.name = name self.age = age def greet(self): print(f"Hello, my name is {self.name} and I am {self.age} years old.")
创建
Person
对象并调用方法:person1 = Person("Alice", 25) person1.greet() # 输出: Hello, my name is Alice and I am 25 years old.
9.2 类属性和实例属性
- 类属性:在类中定义但在方法之外,属于类本身,所有实例共享。
- 实例属性:在
__init__
方法中定义,属于每个实例,每个实例都有自己的副本。
示例:
定义类属性和实例属性:
class Person: species = "Homo sapiens" # 类属性 def __init__(self, name, age): self.name = name # 实例属性 self.age = age # 实例属性 def greet(self): print(f"Hello, my name is {self.name} and I am {self.age} years old.") @classmethod def get_species(cls): return cls.species @staticmethod def is_adult(age): return age >= 18
访问类属性和实例属性:
person1 = Person("Alice", 25) person2 = Person("Bob", 30) print(person1.species) # 输出: Homo sapiens print(person2.species) # 输出: Homo sapiens print(Person.get_species()) # 输出: Homo sapiens print(Person.is_adult(25)) # 输出: True print(Person.is_adult(15)) # 输出: False
9.3 继承
继承允许我们定义一个类(子类)继承另一个类(父类)的属性和方法。子类可以重写或扩展父类的方法。
基本语法:
class SubClass(BaseClass):
def __init__(self, param1, param2):
super().__init__(param1)
self.param2 = param2
def new_method(self):
# 新方法
pass
def overridden_method(self):
# 重写父类方法
pass
示例:
定义父类
Animal
和子类Dog
:class Animal: def __init__(self, name): self.name = name def speak(self): raise NotImplementedError("Subclass must implement this method") class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed def speak(self): return f"{self.name} says Woof!"
创建
Dog
对象并调用方法:dog1 = Dog("Buddy", "Golden Retriever") print(dog1.speak()) # 输出: Buddy says Woof!
9.4 多态
多态是指不同类的对象对同一消息作出不同的响应。在 Python 中,多态主要通过方法重写和鸭子类型(Duck Typing)实现。
示例:
定义多个类并实现相同的方法:
class Cat: def speak(self): return f"Meow!" class Duck: def speak(self): return f"Quack!"
使用多态:
def make_animal_speak(animal): print(animal.speak()) cat1 = Cat() duck1 = Duck() make_animal_speak(cat1) # 输出: Meow! make_animal_speak(duck1) # 输出: Quack!
9.5 特殊方法
特殊方法(也称为魔术方法或双下划线方法)是在类中定义的一些特殊方法,它们有特定的用途,如 __init__
、__str__
、__repr__
等。
常见特殊方法:
__init__(self, ...)
: 构造函数,用于初始化对象。__str__(self)
: 返回对象的字符串表示,用于print
和str
。__repr__(self)
: 返回对象的“官方”字符串表示,用于repr
。__len__(self)
: 返回对象的长度。__getitem__(self, key)
: 获取对象的某个元素。__setitem__(self, key, value)
: 设置对象的某个元素。__delitem__(self, key)
: 删除对象的某个元素。
示例:
定义一个类并实现特殊方法:
class MyList: def __init__(self, initial_data): self.data = initial_data def __str__(self): return str(self.data) def __repr__(self): return f"MyList({self.data})" def __len__(self): return len(self.data) def __getitem__(self, index): return self.data[index] def __setitem__(self, index, value): self.data[index] = value def __delitem__(self, index): del self.data[index]
使用特殊方法:
my_list = MyList([1, 2, 3, 4]) print(my_list) # 输出: [1, 2, 3, 4] print(repr(my_list)) # 输出: MyList([1, 2, 3, 4]) print(len(my_list)) # 输出: 4 print(my_list[1]) # 输出: 2 my_list[1] = 10 print(my_list) # 输出: [1, 10, 3, 4] del my_list[1] print(my_list) # 输出: [1, 3, 4]
小结
通过本节的学习,你应该已经掌握了 Python 中面向对象编程的基本概念和用法,包括类和对象、类属性和实例属性、继承、多态以及特殊方法。面向对象编程是一种强大的编程范式,能够帮助你编写更模块化、更易维护的程序。下一节我们将继续学习 Python 中的高级主题。
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。