当前位置: 首页 > ds >正文

python---类.函数名(self) 和 self.函数名()的调用方式

文章目录

  • 1. 基本等价性
  • 2. 重要区别
    • 2.1 继承和多态
    • 2.2 描述符协议
  • 3. 使用场景
  • 4. 总结

1. 基本等价性

class MyClass:def method(self, x):return x * 2obj = MyClass()# 这两种调用方式是等价的
result1 = obj.method(5)        # self.method(5)
result2 = MyClass.method(obj, 5)  # 类.方法(self, 5)print(result1, result2)  # 输出: 10 10

2. 重要区别

2.1 继承和多态

class Parent:def method(self):print("Parent method")class Child(Parent):def method(self):print("Child method")obj = Child()# 这两种方式的行为不同
obj.method()          # 输出: "Child method" (动态绑定)
Parent.method(obj)    # 输出: "Parent method" (静态调用)

2.2 描述符协议

如果方法被包装成属性或有其他描述符行为,两种方式可能不同:

class MyClass:@propertydef method(self):return "property method"def real_method(self):return "real method"obj = MyClass()print(obj.method)          # 输出: "property method" (作为属性访问)
print(MyClass.method)      # 输出: <property object> (访问属性对象)

3. 使用场景

推荐使用 self.方法名()
1、大多数情况下

2、支持多态和继承

3、代码更清晰

使用 类.方法名(self) 的情况
1、需要显式调用父类方法时

2、需要绕过方法重写时

3、在某些元编程场景中

class Parent:def method(self):print("Parent")class Child(Parent):def method(self):# 先调用父类方法Parent.method(self)  # 显式指定类print("Child")

4. 总结

特性self.方法名()类.方法名(self)
多态支持✅ 是❌ 否
继承行为动态绑定静态绑定
代码清晰度
使用频率常用特殊情况
http://www.xdnf.cn/news/19614.html

相关文章:

  • 数据结构 二叉树
  • RocketMQ5.0+保姆级单点Docker部署教程
  • 暴力破解基础知识(一)
  • 深入解析 Oracle 并发与锁机制:高并发环境下的数据一致性之道
  • 【数论】P10558 [ICPC 2024 Xi‘an I] XOR Game|普及+
  • 深度学习导论:从理论起源到前沿应用与挑战
  • Halcon学习--(1)常用算子
  • 大模型RAG项目实战:向量数据库Faiss
  • 蓓韵安禧活性叶酸源于上市企业生产
  • 手写MyBatis第44弹:解密MyBatis四大核心组件拦截之道
  • 【influxdb】InfluxDB 2.x 线性写入详解
  • 【IDE问题篇】新电脑安装Keil5,出现找不到arm 编译器版本5编译报错;改为版本6后旧代码编译是出现编译报错
  • 自然语言处理NLP:嵌入层Embedding中input_dim的计算——Tokenizer文本分词和编码
  • android中常见布局及其约束
  • 超越关键词:RAG系统如何破解用户查询的“模糊密码”
  • Redis 中的 Bitmap 与 Bitfield 及 Java 操作实践
  • 【LeetCode】18、四数之和
  • LeetCode 每日一题 2025/8/25-2025/8/31
  • SciPy
  • DrissionPage 实战:动态 IP 代理与百度翻译 API 数据抓取
  • 硬件开发_基于物联网的工厂环境监测系统
  • Qt Demo之 deepseek 帮我写的关于双目标定的小界面
  • redis----zset详解
  • Langflow Memory 技术深度分析
  • Langflow RAG 技术深度分析
  • 人工智能学习:机器学习相关面试题(二)
  • MySQL-视图与用户管理
  • Langchain指南-关键特性:如何流式传输可运行项
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘SQLModel’问题
  • 案例——从零开始搭建 ASP.NET Core 健康检查实例