通往 AI 之路:Python 机器学习入门-面向对象编程
1.3 面向对象编程(OOP)
面向对象编程(Object-Oriented Programming,OOP)是一种编程范式,它通过“类”和“对象”来组织代码,使程序更加模块化、可扩展和可维护。Python 是一种面向对象的编程语言,本章将介绍 Python 中的面向对象编程基础。
1.3.1 类和对象
在 Python 中,一切皆对象。对象是某个类的具体实例,而类是创建对象的模板。
1. 定义类和创建对象
# 定义一个类
class Person:
def __init__(self, name, age):
self.name = name # 实例变量
self.age = age # 实例变量
def introduce(self):
print(f"我是 {self.name},今年 {self.age} 岁。")
# 创建对象
p1 = Person("Alice", 25)
p2 = Person("Bob", 30)
# 调用方法
p1.introduce() # 输出: 我是 Alice,今年 25 岁。
p2.introduce() # 输出: 我是 Bob,今年 30 岁。
在上述代码中:
class Person:
定义了一个Person
类。__init__
方法是构造方法(初始化方法),在创建对象时自动执行。self
代表实例对象,它用于访问实例变量和方法。
1.3.2 继承与多态
1. 继承(Inheritance)
继承是一种面向对象的特性,允许一个类(子类)继承另一个类(父类)的属性和方法,从而实现代码复用。
# 定义父类
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
print("动物在发出声音")
# 定义子类,继承 Animal
class Dog(Animal):
def make_sound(self):
print(f"{self.name} 汪汪叫")
# 定义另一个子类
class Cat(Animal):
def make_sound(self):
print(f"{self.name} 喵喵叫")
# 创建实例
dog = Dog("旺财")
cat = Cat("小黑")
# 调用方法
dog.make_sound() # 输出: 旺财 汪汪叫
cat.make_sound() # 输出: 小黑 喵喵叫
在上述代码中:
Dog
和Cat
继承Animal
,但重写了make_sound()
方法。- 这样,子类可以拥有父类的特性,同时可以自定义自己的行为。
2. 多态(Polymorphism)
多态是指同一方法在不同类的对象上表现出不同的行为。
def animal_sound(animal):
animal.make_sound()
animals = [Dog("旺财"), Cat("小黑")]
for animal in animals:
animal_sound(animal)
输出:
旺财 汪汪叫
小黑 喵喵叫
在这里,animal_sound(animal)
能够接受不同的 Animal
子类对象,并调用它们的 make_sound()
方法。这种方式使代码更加灵活。
1.3.3 魔法方法(Magic Methods)
Python 提供了一些特殊的方法(又称魔法方法),以 __
(双下划线)开头和结尾。这些方法可以让类对象实现特定的行为。
1. __init__
方法(构造方法)
__init__
是对象初始化时自动调用的方法。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
p = Person("Alice", 25)
print(p.name) # 输出: Alice
2. __str__
方法(字符串表示)
__str__
方法用于定义对象的字符串表示,print
对象时会调用它。
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"姓名: {self.name}, 年龄: {self.age}"
p = Person("Alice", 25)
print(p) # 输出: 姓名: Alice, 年龄: 25
3. __call__
方法(使对象变成可调用)
__call__
方法允许对象像函数一样被调用。
class Counter:
def __init__(self):
self.count = 0
def __call__(self):
self.count += 1
print(f"当前计数: {self.count}")
counter = Counter()
counter() # 输出: 当前计数: 1
counter() # 输出: 当前计数: 2
在这里,Counter
类的实例 counter
变成了一个可调用对象,像函数一样使用 counter()
。
1.3.4 总结
本章介绍了 Python 的面向对象编程,包括:
- 类和对象:通过
class
关键字定义类,并使用self
访问实例变量和方法。 - 继承与多态:子类可以继承父类,并通过方法重写实现多态。
- 魔法方法:
__init__
用于初始化对象;__str__
定义对象的字符串表示;__call__
使对象变得可调用。
面向对象编程使代码更结构化、易维护,掌握这些概念将为后续的机器学习编程打下坚实的基础。💡