一、三种方法最全对比
1. 实例方法
特点
语法
classPerson:
def__init__(self,name):
self.name = name
# 实例方法
defsay(self):
print(f"我是{self.name}")
调用:
p = Person("小明")
p.say()
2. 类方法 @classmethod
特点
语法
classPerson:
age = 18# 类属性
@classmethod
defshow_age(cls):
print(cls.age)
调用:
Person.show_age()
p = Person()
p.show_age()
3. 静态方法 @staticmethod
特点
语法
classPerson:
@staticmethod
defadd(a,b):
return a + b
调用:
print(Person.add(3,5))
二、三种方法一眼分清
三、类属性 vs 实例属性
1. 类属性
classPerson:
country = "中国"# 类属性
2. 实例属性
classPerson:
country = "中国"# 类属性
def__init__(self,name):
self.name = name # 实例属性
核心区别口诀
四、访问控制:公有 / 受保护 _ / 私有 __
Python 没有真正严格的权限,靠命名约定实现
1. 公有(默认)
正常命名,谁都能访问
self.name = "小明"# 公有
外部可直接:p.name
2. 受保护 _属性
单下划线开头:_age
classPerson:
def__init__(self):
self._age = 18# 受保护
3. 私有 __属性
双下划线开头:__money
classPerson:
def__init__(self):
self.__money = 1000# 私有属性
私有属性访问套路
提供 get/set 方法
classPerson:
def__init__(self):
self.__money = 1000
defget_money(self):
returnself.__money
defset_money(self,money):
if money > 0:
self.__money = money
五、访问控制总结
六、整体速记总结
- 2. 类方法:@classmethod + cls,操作类属性
- 3. 静态方法:@staticmethod,无 self/cls,纯工具函数
- 5. _xxx 受保护,__xxx 私有,外部不能直接乱用