Python @ DjangoSpin

PyPro #66 Prototype Design Pattern

Buffer this pageShare on FacebookPrint this pageTweet about this on TwitterShare on Google+Share on LinkedInShare on StumbleUpon
Reading Time: 1 minutes

Prototype Design Pattern in Python

Prototype Design Pattern in Python

Write a Python program to implement Prototype Design Pattern.

Prototype

import copy
 
class Car:
        '''Prototypical class'''
        def __init__(self):
                ''''Gives each object three attributes and initializes them to default values'''
                self.engine = "3200cc"
                self.color = "Blue"
                self.seats = "5"
        def __str__(self):
                '''Returns the string representation of the object when we print the object.'''
                return  '{} | {} | {}'. format(self.engine, self.color, self.seats)
 
class Prototype:
        '''Prototype class'''
        def __init__(self):
                '''Creates a dictionary object which stores to-be-cloned objects'''
                self._toBeClonedObjects = {}
        def registerObject(self, name, obj):
                '''Registers the object to be cloned. It takes two arguments, 'name' & 'obj'. These values denote the key-value pair
                 which will be entered in the dictionary that contains the to-be-cloned objects.'''
                self._toBeClonedObjects[name] = obj
        def unregisterObject(self, name):
                '''Deletes the mentioned to-be-cloned object from the dictionary.'''
                del self._toBeClonedObjects[name]
        def clone(self, name, **kwargs):
                '''Clones/Replicates the prototypical object. Deepcopy is used for cloning, since it creates new compound object with fresh copies of attributes found in the original. The clone method provides a way of updating the basic attributes of the basic object. The __dict__ represents all the attributes of the object i.e. engine, color & seats. Returns the cloned object.'''
                clonedObject = copy.deepcopy(self._toBeClonedObjects.get(name))
                clonedObject.__dict__.update(kwargs)
                return clonedObject
 
defaultCar = Car()                                                      # Prototypical object: this is the object that will be cloned.
prototype = Prototype()
prototype.registerObject('basicCar', defaultCar)            # registering the defaultCar in toBeCloned dictionary with its key as 'basicCar'
 
carOne = prototype.clone('basicCar')                          # Cloned object
print("Details of carOne:", carOne)                             # OUTPUT: Details of carOne: 3200cc | Blue | 5
 
carTwo = prototype.clone('basicCar', color = "Black")  # another Cloned object
print("Details of carTwo:", carTwo)                             # OUTPUT: Details of carTwo: 3200cc | Black | 5

See also:

Buffer this pageShare on FacebookPrint this pageTweet about this on TwitterShare on Google+Share on LinkedInShare on StumbleUpon

Leave a Reply