gpt4 book ai didi

python - 使用字典来控制方法的流程

转载 作者:太空宇宙 更新时间:2023-11-04 08:13:41 26 4
gpt4 key购买 nike

我有一个包含多个方法的类 Population。

根据输入,我希望按给定顺序在类 Population 的实例上运行该方法。

为了更准确地实现我想要实现的目标,与使用类似的东西完全相同:

stuff = input(" enter stuff ")

dico = {'stuff1':functionA, 'stuff2':functionC, 'stuff3':functionB, 'stuff4':functionD}

dico[stuff]()

除了 functionA、functionB 等...是方法而不是函数:

order_type = 'a'
class Population (object):
def __init__(self,a):
self.a = a

def method1 (self):
self.a = self.a*2
return self

def method2 (self):
self.a += 2
return self

def method3 (self,b):
self.a = self.a + b
return self

if order_type=='a':
order = {1:method1, 2:method2, 3:method3}
elif order_type=='b':
order = {1:method2, 2:method1, 3:method3}
else :
order = {1:method3, 2:method2, 3:method1}

my_pop = Population(3)

while iteration < 100:
iteration +=1
for i in range(len(order)):
method_to_use = order[i]
my_pop.method_to_use() # But obviously it doesn't work!

希望我已经把我的问题说清楚了!请注意,我的方法之一需要两个参数

最佳答案

将实例作为第一个参数显式传递:

method_to_use = order[i]
method_to_use(my_pop)

完整的工作代码:

order_type = 'a'
class Population (object):
def __init__(self,a):
self.a = a

def method1 (self):
self.a = self.a*2
return self

def method2 (self):
self.a += 2
return self

def method3 (self):
self.a = 0
return self

if order_type=='a':
order = [Population.method1, Population.method2, Population.method3]
elif order_type=='b':
order = [Population.method2, Population.method1, Population.method3]
else :
order = [Population.method3, Population.method2, Population.method1]

my_pop = Population(3)

while iteration < 100:
iteration +=1
for method_to_use in order:
method_to_use(my_pop)

如果要传递多个参数,只需使用*args 语法:

if order_type=='a':
order = [Population.method1, Population.method2, Population.method3]
arguments = [(), (), (the_argument,)]
elif order_type=='b':
order = [Population.method2, Population.method1, Population.method3]
arguments = [(), (), (the_argument,)]
else :
order = [Population.method3, Population.method2, Population.method1]
arguments = [(the_argument, ), (), ()]

my_pop = Population(3)

while iteration < 100:
iteration +=1
for method_to_use, args in zip(order, arguments):
method_to_use(my_pop, *args)

() 是一个空元组,因此 *args 将扩展为没有其他参数,而 (the_argument,) 是一个 1 - 将参数传递给方法的元素元组。

关于python - 使用字典来控制方法的流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18042419/

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