当前位置:首页>python>Python 面向对象完整版--实例方法 / 类方法 / 静态方法/类属性/实例属性 / 公有/受保护 /私有/访问控制

Python 面向对象完整版--实例方法 / 类方法 / 静态方法/类属性/实例属性 / 公有/受保护 /私有/访问控制

  • 2026-10-11 08:25:34
Python 面向对象完整版--实例方法 / 类方法 / 静态方法/类属性/实例属性 / 公有/受保护 /私有/访问控制

一、三种方法最全对比

1. 实例方法

特点

  • • 第一个参数必须是 self
  • • 只能由对象调用
  • • 可以访问 实例属性、类属性
  • • 最常用

语法

classPerson:
def__init__(self,name):
self.name = name

# 实例方法
defsay(self):
print(f"我是{self.name}")

调用:

p = Person("小明")
p.say()

2. 类方法 @classmethod

特点

  • • 装饰器 @classmethod
  • • 第一个参数必须是 cls(代表当前类)
  • • 可以用类名 / 对象调用
  • • 只能访问 类属性,不能直接用实例属性

语法

classPerson:
    age = 18# 类属性

    @classmethod
defshow_age(cls):
print(cls.age)

调用:

Person.show_age()
p = Person()
p.show_age()

3. 静态方法 @staticmethod

特点

  • • 装饰器 @staticmethod
  • • 不需要 self、cls
  • • 跟普通函数几乎一样,只是放在类里
  • • 不能直接访问类属性、实例属性
  • • 工具类、通用工具函数用

语法

classPerson:
    @staticmethod
defadd(a,b):
return a + b

调用:

print(Person.add(3,5))

二、三种方法一眼分清

方法类型
装饰器
首参数
调用方式
可访问内容
实例方法
无
self
对象调用
实例属性、类属性
类方法
@classmethod
cls
类/对象都可
仅类属性
静态方法
@staticmethod
无
类/对象都可
无内置属性访问

三、类属性 vs 实例属性

1. 类属性

  • • 写在类里面、方法外面
  • • 属于类,所有对象共享同一份
  • • 修改类属性,所有对象都会受影响
classPerson:
    country = "中国"# 类属性

2. 实例属性

  • • 写在 __init__ 里,self.xxx
  • • 属于单个对象,每个对象独有
  • • 修改自己的实例属性,互不影响
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

  • • Python 会名字重整,外部无法直接访问
  • • 只能类内部访问
classPerson:
def__init__(self):
self.__money = 1000# 私有属性
  • • 外部直接 p.__money 报错
  • • 只能通过类内部方法获取/修改

私有属性访问套路

提供 get/set 方法

classPerson:
def__init__(self):
self.__money = 1000

defget_money(self):
returnself.__money

defset_money(self,money):
if money > 0:
self.__money = money

五、访问控制总结

类型
写法
访问权限
公有
name
任何地方都能访问
受保护
_name
约定子类可用,外部慎用
私有
__name
仅类内部可用,外部隐藏

六、整体速记总结

  1. 1. 实例方法:带 self,操作对象自己
  2. 2. 类方法:@classmethod + cls,操作类属性
  3. 3. 静态方法:@staticmethod,无 self/cls,纯工具函数
  4. 4. 类属性:类里共享;实例属性:self 独有
  5. 5. _xxx 受保护,__xxx 私有,外部不能直接乱用

最新文章

随机文章