Python 给定输入参数的多重初始化
我试图使我的类根据传递的参数执行给定的次数。我的类将字典转换为一些所需的数据 让我举一个简单的例子来说明我的确切意思: First classPython 给定输入参数的多重初始化,python,oop,Python,Oop,我试图使我的类根据传递的参数执行给定的次数。我的类将字典转换为一些所需的数据 让我举一个简单的例子来说明我的确切意思: First classA只为派生类提供了常用方法。 类B,E(示例中跳过)初始化对象并提供B\u stuff和E\u stuff。 现在ClassC开始发挥作用。它基本上转换给定的dictionarymydict,该dictionary有一个描述迭代次数的键值对“iter”:“val” class C(B, E): def __init__(self, mydi
A
只为派生类提供了常用方法。
类B
,E
(示例中跳过)初始化对象并提供B\u stuff
和E\u stuff
。
现在ClassC
开始发挥作用。它基本上转换给定的dictionarymydict
,该dictionary有一个描述迭代次数的键值对“iter”:“val”
class C(B, E):
def __init__(self, mydict):
B.__init__(self, mydict) # access to b_stuff
E.__init__(self, mydict) # access to e_stuff
self.iters = int(self.mydict['iters']) # desired nb of initialisations/executions
self.c_stuff = [b_stuff, e_stuff, other]
def do_magic(self):
A.do_magic(self.c_stuff)
现在的问题是,一旦在代码中稍后从外部循环调用一个类,我就不知道如何将我的类设置为dou\u magic
mydict['iters']
多次
for d in list_of_dicts:
C(d).do_magic()
解决方案之一是,我将在上面的外部循环中初始化这个类,如下所示:
for d in list_of_dicts:
for i in range(int(d['iters']))
C(d).do_magic()
但它感觉与OOP风格相去甚远
为了百分之百地确保你们都听我的,我将在这里展示实际的预期行为:
d
-输入字典d['iters']=2
执行
C(d).do_magic()
实际结果:
>>>
'XXX YYY RANDOM_NUMBER1 .... '
>>>
'XXX YYY RANDOM_NUMBER1 .... '
'XXX YYY RANDOM_NUMBER2 .... ' # random number from class B re-initialised!!
预期结果:
>>>
'XXX YYY RANDOM_NUMBER1 .... '
>>>
'XXX YYY RANDOM_NUMBER1 .... '
'XXX YYY RANDOM_NUMBER2 .... ' # random number from class B re-initialised!!
在探索堆栈时,我发现了一些提示,可以参考\uuuuu new\uuuuuu
方法,但仍然不知道这是否是一条正确的路径以及方法:)
编辑:
正如@Peter wood所建议的,在一个问题上补充:
我想指出的是,两个属性b_stuff
和e_stuff
一旦初始化,就会生成唯一字符串,它们是c_stuff
的一部分,并且将随着每个do_magic()
调用而更新
这个方法基本上是这样的。join(obj)(参见class A)这很好,但没有完全按照我的预期工作,因为:在
b_stuff
中,我有一些random_number
是在每次初始化中生成的,需要是唯一的,您提供的解决方案引用了相同的初始值。不过还是要谢谢你。@TestuserSemathopy把这个问题提了出来。
class C(B, E):
def do_magic(self):
for _ in range(self.iters):
A.do_magic(self.c_stuff)