当前位置:首页>python>Python面向对象入门:实例方法、类方法、静态方法

Python面向对象入门:实例方法、类方法、静态方法

  • 2026-10-12 11:00:33
Python面向对象入门:实例方法、类方法、静态方法

hello,大家好呀!我是星禾。

刚接触编程的朋友可能都会面临这样的问题,学习面向对象编程(OOP)之前,写代码都是"函数式思维"——遇到问题就写个函数,导致同一个项目的代码越写越乱,改起来特别头疼。

学习了OOP之后就会发现,类这个概念真的太香了!它能把数据和操作数据的方法打包在一起,代码结构一下子就会清晰很多。

今天我就把我整理的OOP入门知识分享给大家,尤其适合刚学完基础、想进阶的Python小白。


▶什么是类?先搞懂这个基本概念

简单来说,类(Class) 就是一种"蓝图"或者"模板",它定义了某种事物的共同特征和行为。

举个例子,"狗"这个类会包含: - 属性:名字、年龄、品种(数据) - 方法:叫、跑、吃饭(行为)

而具体的某只狗,比如"旺财",就是从这个蓝图"刻"出来的对象。

class Dog:    species = "犬科"  # 类属性:所有狗共享    def __init__(self, name, age):        self.name = name  # 实例属性:每只狗不同        self.age = age    def bark(self):  # 实例方法        return f"{self.name}汪汪叫!"


▶核心问题:实例方法、类方法、静态方法到底怎么选?

这是很多初学者困惑的地方。结合我总结的这张对比表,相信你会有更清晰的概念。一下子就会拜托那种傻傻分不清的状态:

方法类型
装饰器
第一个参数
能访问类属性
能访问实例属性
什么时候用
实例方法
无
self
✅
✅
最常用!
 需要操作具体对象的状态
类方法
@classmethodcls
✅
❌
需要操作类级别的数据,或作为"工厂方法"
静态方法
@staticmethod
无
❌
❌
函数逻辑与类相关,但不需要任何状态

1️⃣ 实例方法 —— 最常用的那种

实例方法是我们在类里写得最多的方法。它的第一个参数必须是 self,代表调用这个方法的具体对象。

class BankAccount:    def __init__(self, balance):        self.balance = balance  # 实例属性    def withdraw(self, amount):  # 实例方法        if amount <= self.balance:            self.balance -= amount            return f"取款成功,剩余{self.balance}"        return "余额不足"# 创建对象account = BankAccount(1000)print(account.withdraw(300))  # 取款成功,剩余700

什么时候用:当你的方法需要访问或修改某个具体对象的状态时,用实例方法。

2️⃣ 类方法 —— 操作"类"而不是"对象"

类方法用 @classmethod 装饰,第一个参数是 cls(代表类本身)。

它最大的特点是:不需要创建对象就能调用,而且能访问类属性。

class Person:    population = 0  # 类属性:所有Person共享    def __init__(self, name):        self.name = name        Person.population += 1    @classmethod    def get_population(cls):        return cls.population    @classmethod    def from_string(cls, person_str):        # 工厂方法:从字符串创建对象        name = person_str.split("-")[0]        return cls(name)print(Person.get_population())  # 0,还没创建对象p1 = Person("小明")p2 = Person.from_string("小红-25")  # 用类方法创建对象print(Person.get_population())  # 2

什么时候用: - 需要统计类级别数据(比如总共有多少个对象) - 提供多种创建对象的方式(工厂模式) - 不需要访问实例属性

3️⃣ 静态方法 —— 挂在类里的"工具人"

静态方法用 @staticmethod 装饰,不需要 self 或 cls 参数,它就像一个普通的函数,只是"住在"类里面。

import mathclass MathUtils:    @staticmethod    def calculate_distance(x1, y1, x2, y2):        return math.sqrt((x2-x1)**2 + (y2-y1)**2)    @staticmethod    def is_valid_email(email):        return "@" in email and "." in email# 调用:不需要创建对象dist = MathUtils.calculate_distance(0, 0, 3, 4)print(dist)  # 5.0print(MathUtils.is_valid_email("test@example.com"))  # True

什么时候用:这个函数的逻辑与类相关,但完全不需要访问类或实例的任何数据。


▶用生活中的例子理解OOP三大特征

光讲代码可能有点抽象,来说几个生活场景帮助理解:

封装 —— "柜子锁门"的思想

就像手机有指纹锁,你只能通过指纹解锁来操作,不能直接拆电池。类的封装就是给数据"上锁",保护内部状态不被随意破坏。

class BankAccount:    def __init__(self):        self.__balance = 0  # 私有属性,外部访问不了    def deposit(self, amount):        if amount > 0:            self.__balance += amount            return True        return False    def get_balance(self):        return self.__balanceaccount = BankAccount()account.deposit(1000)print(account.get_balance())  # 1000# print(account.__balance)  # 报错!访问不了

继承 —— "儿子继承老子"

儿子可以继承父亲的姓氏、房产,同时也可以有自己的特点。类的继承就是让子类自动拥有父类的属性和方法。

class Animal:    def speak(self):        print("动物叫")class Dog(Animal):  # Dog继承Animal    def speak(self):  # 重写父类方法        print("汪汪!")class Cat(Animal):    def speak(self):        print("喵喵!")dog = Dog()dog.speak()  # 汪汪!

多态 —— "同一个动作,不同表现"

不同的人对"打招呼"有不同的方式。Python的多态让你用统一的接口调用不同的实现。

def make_speak(animal):    animal.speak()make_speak(Dog())   # 输出: 汪汪!make_speak(Cat())   # 输出: 喵喵!# 同一个函数,传入不同对象,表现不同


▶实战:写一个简单的电商订单类

最后来一个实际场景练练手:

class Product:    def __init__(self, name, price):        self.name = name        self.price = price    def get_price(self):        return self.priceclass DiscountedProduct(Product):    def __init__(self, name, price, discount):        super().__init__(name, price)        self.discount = discount    def get_price(self):  # 多态:重写价格计算        return self.price * (1 - self.discount)# 统一管理订单products = [    Product("手机", 3000),    DiscountedProduct("耳机", 500, 0.2)  # 8折]total = sum(p.get_price() for p in products)print(f"订单总价:¥{total}")  # 3400

看,即使产品打折逻辑不同,我们只需要调用 get_price(),不用管具体实现。这就是多态的好处。


▶总结

学完这一章,相信你也感受到了:OOP不是高深莫测的概念,而是组织代码的一种思维方式。

记住这张表就够了:

场景
选择
需要操作对象的具体数据
实例方法
需要操作类级别数据,或创建对象
类方法
函数与类相关但不需要状态
静态方法

下节课我们继续深入,看看怎么用OOP思想写一个完整的小项目!


今日份总结: 

- ✅ 理解了类与对象的区别 

- ✅ 掌握了三种方法的适用场景 

- ✅ 了解了封装、继承、多态的概念 

- ✅ 通过实战巩固了知识


今天的分享就到这里啦,大家平时写Python更习惯用函数式还是面向对象呢?

欢迎在评论区打出来,我们一起交流~

我是星禾,专注AI前沿知识分享,如果你想入局AI赛道,赶上这波风口。欢迎来找我, 我这里有基础的免费资料,也有全套的系统化AI智能体+工作流搭建+AI漫剧+小龙虾课程。欢迎各位朋友的加入!

我们下期见!

最新文章

随机文章