Python:在对象上传递和执行类方法

时间:2019-02-15 11:55:27

标签: python python-3.x

我有简单的类和对象

class Cat():
    def pet(self):
        print('mrrrrrr')

puss = Cat()

有没有一种内置的机制,例如:

cat_sound = ???(puss, Cat.pet)

所以我可以以一种很好的方式分别传递和使用对象及其类函数吗?

我知道我可以做到:

cat_sound = getattr(puss, 'pet')
cat_sound()

并且:

 catsound = getattr(puss, Cat.pet.__name__)
 catsound()

即使这样,也可以解决我的问题,但看起来很丑:

 catsound = getattr(puss, getattr(Cat.pet, '__name__'))
 catsound()

编辑: 另一种方法是致电:

 Cat.pet(puss)

但是我的问题仍然悬而未决:)

2 个答案:

答案 0 :(得分:2)

没有比这更简单的解决方案了:

Cat.pet(puss)

为什么这样做?很简单,因为self和对象实例puss是内存中的同一对象,因此当您尝试不带任何属性调用Cat.pet()时,将得到TypeError: pet() missing 1 required positional argument: 'self',因此您知道什么需要通过。 现在,您可以创建一个简单的函数,

def method_executor(method_ref, obj_instance, *args, **kwargs):
    return method_ref(obj_instance, *args, **kwargs)

argskwargs被添加以保持将值传递给其他属性并像这样使用它的可能性:

method_executor(Cat.pet, puss)

答案 1 :(得分:0)

我认为您的意思是在类定义中使用miau而不是pet。 那你就可以做

cat_sound = puss.miau
cat_sound()