我有简单的类和对象
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)
但是我的问题仍然悬而未决:)
答案 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)
args
和kwargs
被添加以保持将值传递给其他属性并像这样使用它的可能性:
method_executor(Cat.pet, puss)
答案 1 :(得分:0)
我认为您的意思是在类定义中使用miau
而不是pet
。
那你就可以做
cat_sound = puss.miau
cat_sound()