gpt4 book ai didi

python - 是否可以在不知道 Python 实例的情况下将实例方法作为参数传递

转载 作者:行者123 更新时间:2023-11-28 20:00:25 26 4
gpt4 key购买 nike

我想将一个实例方法传递给另一个函数,但是当我这样做时我不知道它来自哪个实例。我只知道派生这些实例的基类。有没有办法从函数内部调用实例方法?

我有以下代码:

class Base:
def do_something():
pass


class InstanceOne(Base):
def do_something():
print("Instance One")


class InstanceTwo(Base):
def do_something():
print("Instance Two")


def my_function(instances_list: List[Base], method)
for instance in instances_list:
instance.method()


# The main part
my_list = [InstanceOne(), InstanceTwo(), InstanceTwo(), InstanceOne()]
my_function(my_list, Base.do_something)

上面的代码将无法运行,因为函数 do_something 是在 Base 类上调用的,而不是在实例上调用的。当函数 (my_function) 不知道实例是什么时,有没有一种方法可以实际调用实例的方法 do_something

最佳答案

你可以使用operator.methodcaller

def my_function(instances_list: List[Base], method_name):
method = methodcaller(method_name)
for instance in instances_list:
method(instance)

你的函数也是方法,它们需要接受一个self参数。

您的代码应如下所示:

from operator import methodcaller

class Base:
def do_something(self):
pass


class InstanceOne(Base):
def do_something(self):
print("Instance One")


class InstanceTwo(Base):
def do_something(self):
print("Instance Two")


def my_function(instances_list, method_name):
method = methodcaller(method_name)
for instance in instances_list:
method(instance)


# The main part
my_list = [InstanceOne(), InstanceTwo(), InstanceTwo(), InstanceOne()]
my_function(my_list, 'do_something')

这个输出:

Instance One
Instance Two
Instance Two
Instance One

关于python - 是否可以在不知道 Python 实例的情况下将实例方法作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58076879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com