LEEFEI571 发表于 2025-3-29 19:47:30

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

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

那么我的困惑就是如何在对象中创建这个对象专属的方法呢?烦请大佬指点,谢谢!

FishC 发表于 2025-3-29 19:47:48

如何为对象创建专属方法?

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

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

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


import types

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

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

fish1 = Fish("小红鱼")
fish2 = Fish("小蓝鱼")

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

fish1.swim()# 正常输出
fish2.swim()# 报错:AttributeError


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

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


fish1.say_hi = lambda: print("Hi,我是小红鱼!")
fish1.say_hi()


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

总结


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


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

player-none 发表于 2025-4-4 09:32:36

class A:
    pass
a = A()
a.func = lambda: print(1)
a.func()

#or

class B(A):
    def func(self):
      print(1)

#or

class C:
    def __init__(self, func):
      self.func = func
页: [1]
查看完整版本: 关于能否在对象中创建专属的方法