[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/ChicoQ/python-patterns/master/prototype.py [Back]  [Original]

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import copy


class Prototype:
    def __init__(self):
        self._objects = {}

    def register_object(self, name, obj):
        """Register an object"""
        self._objects[name] = obj

    def unregister_object(self, name):
        """Unregister an object"""
        del self._objects[name]

    def clone(self, name, **attr):
        """Clone a registered object and update inner attributes dictionary"""
        obj = copy.deepcopy(self._objects.get(name))
        obj.__dict__.update(attr)
        return obj


def main():
    class A:
        pass

    a = A()
    prototype = Prototype()
    prototype.register_object('a', a)
    b = prototype.clone('a', a=1, b=2, c=3)

    print(a)
    print(b.a, b.b, b.c)


if __name__ == '__main__':
    main()

### OUTPUT ###
# 
# 1 2 3

Web Proxy Viewer  |  New URL  |  Original Page