【30天玩转python】面向对象编程基础

面向对象编程基础

面向对象编程(Object-Oriented Programming,简称 OOP)是 Python 中非常重要的编程范式之一,它允许我们通过定义类和创建对象来组织代码。本节将介绍 Python 中面向对象编程的基本概念,包括类、对象、方法、继承、多态等核心概念。


1. 类与对象

1.1 什么是类

类是对象的蓝图或模板,定义了对象的属性和行为。属性是类中的变量,行为是类中的方法(函数)。通过类的定义,我们可以创建具有相似属性和行为的多个对象。

python 复制代码
class Dog:
    # 类属性
    species = "Canis lupus"

    # 初始化方法(构造函数)
    def __init__(self, name, age):
        # 实例属性
        self.name = name
        self.age = age

    # 实例方法
    def bark(self):
        print(f"{self.name} 在叫!")

# 创建对象
my_dog = Dog("旺财", 5)
print(my_dog.name)  # 输出:旺财
my_dog.bark()       # 输出:旺财 在叫!
1.2 什么是对象

对象是类的实例化,类就像一个模板,而对象是根据这个模板创建的实际实体。每个对象都有独立的属性和值,但行为(方法)是共享的。

python 复制代码
dog1 = Dog("小白", 2)
dog2 = Dog("大黄", 4)

print(dog1.name)  # 输出:小白
print(dog2.name)  # 输出:大黄

2. 类的构造方法

Python 中的类有一个特殊的初始化方法 __init__(),当我们创建对象时,这个方法会被自动调用,用于初始化对象的属性。

python 复制代码
class Cat:
    def __init__(self, name, color):
        self.name = name
        self.color = color

my_cat = Cat("咪咪", "白色")
print(my_cat.name)   # 输出:咪咪
print(my_cat.color)  # 输出:白色

3. 类属性与实例属性

  • 类属性 :类属性是所有对象共享的属性,定义在类内部但在 __init__() 方法之外。
  • 实例属性 :实例属性是每个对象独有的属性,通常在 __init__() 方法中定义。
python 复制代码
class Bird:
    species = "鸟类"  # 类属性

    def __init__(self, name):
        self.name = name  # 实例属性

bird1 = Bird("麻雀")
bird2 = Bird("乌鸦")

print(bird1.species)  # 输出:鸟类
print(bird2.species)  # 输出:鸟类

print(bird1.name)  # 输出:麻雀
print(bird2.name)  # 输出:乌鸦

4. 方法

类中的方法是定义在类内部的函数,用来描述类的行为。方法有以下几种:

4.1 实例方法

实例方法是最常见的方法,它操作的是对象的属性,并且需要使用 self 参数来访问实例属性。

python 复制代码
class Car:
    def __init__(self, model, color):
        self.model = model
        self.color = color

    def drive(self):
        print(f"{self.color} {self.model} 正在行驶")

my_car = Car("Toyota", "红色")
my_car.drive()  # 输出:红色 Toyota 正在行驶
4.2 类方法

类方法是作用于类本身的方法,它们通过 @classmethod 装饰器定义,并且第一个参数通常是 cls,用于访问类属性。

python 复制代码
class Animal:
    species = "动物"

    @classmethod
    def show_species(cls):
        print(f"这是一个 {cls.species}")

Animal.show_species()  # 输出:这是一个 动物
4.3 静态方法

静态方法不依赖于类或实例,它们通过 @staticmethod 装饰器定义,通常用于定义逻辑上与类相关但不需要访问类或实例属性的方法。

python 复制代码
class MathOperations:
    @staticmethod
    def add(a, b):
        return a + b

result = MathOperations.add(5, 3)
print(result)  # 输出:8

5. 继承

继承是面向对象编程的重要特性之一,它允许一个类继承另一个类的属性和方法,从而实现代码复用。父类(超类)是被继承的类,子类(派生类)是继承父类的类。

python 复制代码
class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        print(f"{self.name} 在发出声音")

# 继承 Animal 类
class Dog(Animal):
    def speak(self):
        print(f"{self.name} 在汪汪叫")

my_dog = Dog("旺财")
my_dog.speak()  # 输出:旺财 在汪汪叫
5.1 重写父类方法

子类可以重写(覆盖)父类中的方法,实现特定功能。

python 复制代码
class Cat(Animal):
    def speak(self):
        print(f"{self.name} 在喵喵叫")

my_cat = Cat("小花")
my_cat.speak()  # 输出:小花 在喵喵叫

6. 多态

多态是指在不同的类中实现相同的方法,尽管方法的实现不同,但它们具有相同的调用方式。多态允许不同类的对象使用相同的接口。

python 复制代码
class Animal:
    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print("汪汪")

class Cat(Animal):
    def speak(self):
        print("喵喵")

def animal_sound(animal):
    animal.speak()

dog = Dog()
cat = Cat()

animal_sound(dog)  # 输出:汪汪
animal_sound(cat)  # 输出:喵喵

7. 封装

封装是一种将对象的属性和方法保护起来的机制,防止外部直接访问和修改。通过在属性名前加 ___,可以将其设置为"私有"或"受保护"属性。

python 复制代码
class Person:
    def __init__(self, name, age):
        self.name = name
        self.__age = age  # 私有属性

    def get_age(self):
        return self.__age

p = Person("Alice", 30)
print(p.name)    # 输出:Alice
print(p.get_age())  # 输出:30

8. 小结

面向对象编程是 Python 强大的编程范式之一,通过类和对象,我们可以组织代码并实现模块化。理解类与对象、继承、多态、封装等核心概念,可以帮助我们编写更清晰、可维护、易扩展的代码。

相关推荐
froginwe114 分钟前
Go 语言数组
开发语言
瑞雨溪5 分钟前
python中的OS模块的基本使用
开发语言·python
醒过来摸鱼9 分钟前
【Golang】协程
开发语言·后端·golang
时光追逐者10 分钟前
.NET 9 中 LINQ 新增功能实操
开发语言·开源·c#·.net·.netcore·linq·微软技术
Leuanghing11 分钟前
使用Python生成F分布表并导出为Excel文件
开发语言·python·excel·f分布
IT枫斗者13 分钟前
如何解决Java EasyExcel 导出报内存溢出
java·服务器·开发语言·网络·分布式·物联网
沈小农学编程16 分钟前
【LeetCode面试150】——202快乐数
c++·python·算法·leetcode·面试·职场和发展
封步宇AIGC33 分钟前
量化交易系统开发-实时行情自动化交易-4.2.1.简单移动平均线实现
人工智能·python·机器学习·数据挖掘
封步宇AIGC39 分钟前
量化交易系统开发-实时行情自动化交易-4.1.4.A股布林带(BOLL)实现
人工智能·python·机器学习·数据挖掘
sun_weitao1 小时前
括号匹配算法
开发语言·python