Skip to content

Instantly share code, notes, and snippets.

@atsuya046
Created March 13, 2014 14:09
Show Gist options
  • Save atsuya046/9529186 to your computer and use it in GitHub Desktop.
Save atsuya046/9529186 to your computer and use it in GitHub Desktop.
GoF design pattern with Python - Prototype
# -*- 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()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment