fluentpython/example-code-2e

Problem with make function on page 843

kamalfarahani opened this issue · 0 comments

I believe the pseudocode for object construction on page 843 is somewhat misleading:

def make(the_class, some_arg):
    new_object = the_class.__new__(some_arg)
    if isinstance(new_object, the_class):
      the_class.__init__(new_object, some_arg)
    return new_object

Firstly, it doesn't function correctly even in the simplest case. the_class.__new__(some_arg) should be called as the_class.__new__(the_class, some_arg) for proper operation. Secondly, it lacks generality. I suggest the following code as a more suitable replacement:

def make(the_class, *args, **kwargs):
    new_object = the_class.__new__(the_class, *args, **kwargs)
    if isinstance(new_object, the_class):
        the_class.__init__(new_object, *args, **kwargs)
    return new_object