mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5mobile wallpaper 6
398 字
1 分钟
python中的方法
2026-03-12

python里的静态方法与类方法#

python里的方法分为实例方法,类方法和静态方法。

什么是方法?#

这个问题嘛😯首先大佬们知道有“函数”这个东西吧?他和方法的区别就是位置不同,参数不同。

打个比方就是

函数:可以定义在全局任何地方,跟个流浪汉一样没有家😭
方法:依附于实例,定义的类就是他的家。并且他的第一个参数必须是self或者cls

实例方法#

好啦,了解了什么是方法之后,我们来看一下实例方法。

定义:不需要装饰器。 第一个参数:self (代表具体的那个对象)。 特点:必须通过 对象 调用 (obj.method())。 能干嘛:既能改对象自己的属性,也能改类的属性

class Fatdog:
def __init__(self,weight):
self.weight=weight#这是实例属性
def poop(self):#这是示例方法
print(f"今天腹泻,拉了和体重一样的💩,大概{self.weight}")
dog1 = Fatdog()
dog1.poop()#调用实例方法
等价于: Fatdog.poop(dog1) -> 自动把 r 传给 self,这是python帮我们实现的,很智能吧!

类方法#

定义:加 @classmethod。 第一个参数:cls (代表类本身,比如 Robot)。 特点:可以通过 类 调用 (Robot.method()),也可以通过对象调用。 能干嘛:不能访问实例属性(因为没有 self),但能访问和修改类属性。 最强场景:替代构造函数(Factory Pattern)。

为什么不用 init 直接搞? 因为有时候你需要不同的创建方式(比如从数据库加载、从配置文件加载、从 JSON 解析),但 init 只能有一个。这时候就用 @classmethod 提供多种“构造入口”。

class Egg:
company="Bigegg"#这个和count都是类属性
count = 0
def __init__(self,name):
self.name = name
Egg.count+=1
@classmethod
def create_with_prefix(cls,prefix,name):
# cls 就是 EGG 类
# 这里可以统一修改类属性,或者根据逻辑返回不同的子类实例
full_name = f"{prefix}_{name}"
print(f"🏭 工厂正在生产: {full_name}")
return cls(full_name) # 相当于调用 Egg(full_name)
@classmethod
def change_commpany(cls,new_name):
cls.company=new_name #修改类属性
e1=Egg.create_with_prefix("aw","bbq")#不用先new对象,直接调用类方法
e2=Egg.create_with_prefix("ddd","aas")
Egg.change_commpany("Fatdog")# 一键修改所有实例的 company
print(e1.company)

静态方法#

我的理解就是他没地方放了(很像普通函数),为了美观塞进了类里面🤪

在类里面加装饰器@staticmethod即可定义

class Robot:
company = "FutureBot"
def __init__(self, name):
self.name = name
@staticmethod
def add_two_numbers(a, b):
# ❌ 这里不能用 self.name
# ❌ 这里不能用 Robot.company
# 它就是个纯函数!
return a + b
@staticmethod
def is_valid_name(name):
# 做个简单的校验逻辑,跟具体哪个机器人无关
return len(name) > 3
# 用法
print(Robot.add_two_numbers(1, 2)) # 输出: 3
print(Robot.is_valid_name("Bob")) # 输出: False
r = Robot("Alice")
print(r.add_two_numbers(5, 5)) # 也能通过对象调,但没啥意义
分享

如果这篇文章对你有帮助,欢迎分享给更多人!

python中的方法
https://mizuki.mysqil.com/posts/function/
作者
神秘大胖狗
发布于
2026-03-12
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

封面
Sample Song
Sample Artist
封面
Sample Song
Sample Artist
0:00 / 0:00