Python实例方法是否为一等对象?能否遍历调用实例方法?
问题解答
1. Python中的实例方法是否属于一等对象?
是的,Python里的实例方法(绑定方法)属于一等对象。一等对象的核心特征是能被赋值给变量、作为参数传递、存入容器(比如列表)、作为函数返回值,实例方法完全满足这些特性——你可以把实例的方法直接存到列表里,或者传给其他函数,和操作普通变量没区别。
2. 能否实现遍历方法列表调用实例方法的操作?
当然可以实现,不过你写的class_instance.method(data)写法如果list_of_methods里是方法名字符串的话会报错(因为实例没有名为method的方法)。你的示例代码用getattr的方式是可行的,但还有更直接的写法:直接把绑定后的方法对象存入列表,而非字符串。
优化后的代码示例:
class Class_Test: def __init__(self): pass def method1(self, data): print(f"Method 1: {data}") def method2(self, data): print(f"Method 2: {data}") # 修正原代码里的打印错误 # 创建单个实例即可,无需每次循环新建 instance = Class_Test() # 直接存入绑定好实例的方法对象 list_of_methods = [instance.method1, instance.method2] for method in list_of_methods: method("inside for loop")
说明:
- 直接存绑定方法的好处是不用每次通过
getattr查找,代码更简洁,而且避免了重复创建实例(你原代码每次循环都Class_Test()会生成新实例,多数场景下没必要)。 - 不管是用
getattr配合方法名字符串,还是直接存方法对象,本质都是利用了Python方法作为一等对象的特性,所以都能实现你想要的遍历调用效果。
内容的提问来源于stack exchange,提问作者An old man in the sea.
相关产品推荐
相关产品推荐

