Python 类方法、静态方法、属性方法 超清晰详解
·
- 实例方法:默认第一个参数
self,只能由对象调用,访问实例属性 - 类方法
@classmethod:第一个参数cls,属于类,统一管类属性 - 静态方法
@staticmethod:无默认参数,跟类和对象基本无关,就是普通工具函数 - 属性方法
@property:把方法伪装成属性,不用加括号调用,安全读写
1. 实例方法(基础对照)
最普通的方法,必须通过对象调用,能访问自己的实例属性。
python
运行
class Person:
def __init__(self, name):
self.name = name
# 实例方法
def say(self):
print(f"我是{self.name}")
p = Person("小明")
p.say()
特点:自带 self,只能访问对象自己的数据。
2. 类方法 @classmethod
特点
- 装饰器:
@classmethod - 第一个参数必须是
cls(代表当前类) - 可以用类名调用,也可以用对象调用
- 只能操作类属性,不能直接用实例属性
代码示例
python
运行
class Person:
# 类属性
count = 0
def __init__(self):
Person.count += 1
# 类方法
@classmethod
def get_count(cls):
# cls 就是 Person 这个类
print(f"总人数:{cls.count}")
# 类直接调用
Person.get_count()
p1 = Person()
p2 = Person()
# 对象也能调用
p1.get_count()
适用场景:统计数量、工厂方法、统一修改类全局数据。
3. 静态方法 @staticmethod
特点
- 装饰器:
@staticmethod - 不需要 self、cls,无默认参数
- 跟类逻辑相关,但不访问类属性、也不访问实例属性
- 类和对象都可以调用
代码示例
python
运行
class Person:
@staticmethod
def is_adult(age):
return age >= 18
# 类调用
print(Person.is_adult(20))
# 对象调用
p = Person()
print(p.is_adult(16))
适用场景:工具函数、数学计算、逻辑判断,跟类绑在一起方便管理。
4. 属性方法 @property
作用
把方法变成属性,调用时不用加 (),还能控制私有属性读写、校验数据。
基础用法(只读)
python
运行
class Person:
def __init__(self, name, age):
self.name = name
self.__age = age # 私有属性
# 属性方法:把方法伪装成属性
@property
def age(self):
return self.__age
p = Person("小红", 18)
print(p.age) # 像属性一样调用,不用 age()
进阶:读写属性 @age.setter
可以赋值,还能做数据校验
python
运行
class Person:
def __init__(self, age):
self.__age = age
@property
def age(self):
return self.__age
# 赋值设置
@age.setter
def age(self, value):
if 0 < value < 150:
self.__age = value
else:
print("年龄不合法")
p = Person(20)
p.age = 30 # 直接赋值
print(p.age)
p.age = 200 # 触发校验,不合法
适用场景:隐藏私有属性、数据校验、简化调用。
终极总结对照表
表格
| 方法类型 | 装饰器 | 第一个参数 | 调用方式 | 核心用途 |
|---|---|---|---|---|
| 实例方法 | 无 | self | 对象调用 | 操作对象自身属性 |
| 类方法 | @classmethod | cls | 类 / 对象均可 | 操作类属性、工厂方法 |
| 静态方法 | @staticmethod | 无 | 类 / 对象均可 | 工具工具函数、独立逻辑 |
| 属性方法 | @property | 无 | 像属性一样调用 | 方法变属性、私有属性读写校验 |
更多推荐



所有评论(0)