鱼C论坛

 找回密码
 立即注册
查看: 187|回复: 2

关于能否在对象中创建专属的方法

[复制链接]
发表于 2025-3-29 19:47:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼老师在讲解<类和对象>中讲到对象的属性可以是自己的,但是对象的方法却是共享的.

那么我的困惑就是如何在对象中创建这个对象专属的方法呢?烦请大佬指点,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-29 19:47:48 | 显示全部楼层
如何为对象创建专属方法?

小甲鱼老师说得没错,Python 中的方法默认是类共享的,也就是说多个对象会共用同一个方法。但如果你想让某个对象拥有“专属”的方法,其实也是可以做到的!

方法一:使用 types.MethodType 动态绑定方法

你可以使用 types.MethodType 给某个对象单独绑定一个方法,这样其他对象就不会有这个方法。


  1. import types

  2. class Fish:
  3.     def __init__(self, name):
  4.         self.name = name

  5. def swim(self):
  6.     print(f"{self.name} 正在专属游泳~")

  7. fish1 = Fish("小红鱼")
  8. fish2 = Fish("小蓝鱼")

  9. # 给 fish1 单独绑定 swim 方法
  10. fish1.swim = types.MethodType(swim, fish1)

  11. fish1.swim()  # 正常输出
  12. fish2.swim()  # 报错:AttributeError
复制代码


方法二:直接给对象添加 lambda 或函数

你也可以直接给对象添加一个函数或 lambda 表达式作为方法:


  1. fish1.say_hi = lambda: print("Hi,我是小红鱼!")
  2. fish1.say_hi()
复制代码


这种方式简单粗暴,但不如 MethodType 那样优雅。

总结

  • 默认情况下,方法是类共享的;
  • 可以使用 types.MethodType 或 lambda 给对象添加专属方法;
  • 这种方式适合特殊需求,不建议滥用。


如果你还有其他关于类和对象的问题,欢迎继续提问哦~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-4 09:32:36 | 显示全部楼层
  1. class A:
  2.     pass
  3. a = A()
  4. a.func = lambda: print(1)
  5. a.func()

  6. #or

  7. class B(A):
  8.     def func(self):
  9.         print(1)

  10. #or

  11. class C:
  12.     def __init__(self, func):
  13.         self.func = func
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-25 23:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表