Search code examples
pythonprototype

python prototype structure, not working


whenever i print the c1 object, it prints: <main.Car object at 0x7fde8b29a240>

however i added the str method, to format it to a proper string, why is it not printing a readable string?

import copy


class Prototype:

    def __init__(self):
        # constructor method to create the object
        self._objects = {}

     def register_object(self, name, obj):
        # this method is used to register an object
        self._objects[name] = obj

     def unregister_object(self, name):
         # this method is used to unregister an object
         del self._objects[name]

     def clone(self, name, **attr):

         obj = copy.deepcopy(self._objects.get(name))
         obj.__dict__.update(attr)
         return obj


class Car:
     def __init__(self):
     self.name = "Skylark"
     self.color = "blue"
     self.options = "extra horsepower in engine"

     def __str__(self):

        return '{} | {} | {}'.format(self.name, self.color, self.options)


c = Car()
prototype = Prototype()
prototype.register_object('skylark',c)


c1 = prototype.clone('skylark')

print(c1)

Solution

  • There is a problem with the indentation in your code. I've corrected this and can get the desired answer too. The indentation is a bit off for the function defs. in both the classes.

    I've called this file as test.py

    import copy
    
    
    class Prototype:
    
        def __init__(self):
            # constructor method to create the object
            self._objects = {}
    
        def register_object(self, name, obj):
        # this method is used to register an object
            self._objects[name] = obj
    
        def unregister_object(self, name):
             # this method is used to unregister an object
            del self._objects[name]
    
        def clone(self, name, **attr):
    
            obj = copy.deepcopy(self._objects.get(name))
            obj.__dict__.update(attr)
            return obj
    
    
    class Car:
        def __init__(self):
            self.name = "Skylark"
            self.color = "blue"
            self.options = "extra horsepower in engine"
    
        def __str__(self):
            return '{} | {} | {}'.format(self.name, self.color, self.options)
    
    
    c = Car()
    prototype = Prototype()
    prototype.register_object('skylark',c)
    
    
    c1 = prototype.clone('skylark')
    
    print(c1)
    

    When I run the file

    $ python test.py
    

    The output is:

    #Output: Skylark | blue | extra horsepower in engine