implemented prototype pattern
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
from copy import deepcopy
|
||||
from types import MethodType
|
||||
|
||||
|
||||
class Prototype(object):
|
||||
"""
|
||||
Prototype design pattern abstract class.
|
||||
"""
|
||||
def copy(self, **attributes):
|
||||
"""
|
||||
Copy this object and optionally update attributes.
|
||||
|
||||
@param attributes: Keyword arguments of any attributes you wish to update.
|
||||
@return: A copy of this object with the updated attributes.
|
||||
"""
|
||||
obj = deepcopy(self)
|
||||
for attribute in attributes:
|
||||
if callable(attributes[attribute]):
|
||||
setattr(obj, attribute, MethodType(attributes[attribute], obj))
|
||||
else:
|
||||
setattr(obj, attribute, attributes[attribute])
|
||||
|
||||
return obj
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user