Note that there are some explanatory texts on larger screens.

plurals
  1. POHow to create objects dynamically in an elegant way in python?
    primarykey
    data
    text
    <p>I have two classes that I would like to merge into a composite. These two classes will continue to be used standalone and I don't want to modify them. For some reasons, I want to let my composite class creating the objects. I am thinking about something like the code below (it is just an example) but I think it is complex and I don't like it very much. I guess that it could be improved by some techniques and tricks that I ignore.</p> <p>Please note that the composite is designed to manage a lot of different classes with different constructor signatures.</p> <p>What would recommend in order to improve this code?</p> <pre><code>class Parent: def __init__(self, x): self.x = x class A(Parent): def __init__(self, x, a="a", b="b", c="c"): Parent.__init__(self, x) self.a, self.b, self.c = a, b, c def do(self): print self.x, self.a, self.b, self.c class D(Parent): def __init__(self, x, d): Parent.__init__(self, x) self.d = d def do(self): print self.x, self.d class Composite(Parent): def __init__(self, x, list_of_classes, list_of_args): Parent.__init__(self, x) self._objs = [] for i in xrange(len(list_of_classes)): self._objs.append(self._make_object(list_of_classes[i], list_of_args[i])) def _make_object(self, the_class, the_args): if the_class is A: a = the_args[0] if len(the_args)&gt;0 else "a" b = the_args[1] if len(the_args)&gt;1 else "b" c = the_args[2] if len(the_args)&gt;2 else "c" return the_class(self.x, a, b, c) if the_class is D: return the_class(self.x, the_args[0]) def do(self): for o in self._objs: o.do() compo = Composite("x", [A, D, A], [(), ("hello",), ("A", "B", "C")]) compo.do() </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload