Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 给定输入参数的多重初始化_Python_Oop - Fatal编程技术网

Python 给定输入参数的多重初始化

Python 给定输入参数的多重初始化,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

我试图使我的类根据传递的参数执行给定的次数。我的类将字典转换为一些所需的数据

让我举一个简单的例子来说明我的确切意思:

First class
A
只为派生类提供了常用方法。

B
E
(示例中跳过)初始化对象并提供
B\u stuff
E\u stuff

现在Class
C
开始发挥作用。它基本上转换给定的dictionary
mydict
,该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)