def prototype(self, **attributes):
        """
        Copy the prototype 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

        Copy the prototype 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.
        
pypattyrn/creational/prototype.py