当需要在原有对象的基础上创建一个该对象的副本时,我们就可以使用原型模式。 在 Python 里可以很简单的通过 copy.copy 或 copy.deepcopy 函数来实现原型模式。
对于 copy 后需要再做一些处理的,可以给这个对象定义一个 clone 方法封装一下具体的操作 或者把操作封装到一个函数里。
比如:
class Book:
def __init__(self, name, authors, price):
self.name = name
self.authors = authors
self.price = price
def clone(self, **kwargs):
book_copy = self.__class__(self.name, self.authors[:], self.price)
book_copy.__dict__.update(**kwargs)
return book_copy
book = Book('hello', ['tom', 'jim'], 10)
book2 = book.clone(name='world', price=20)
book3 = copy.deepcopy(book)
book3.name = 'english'
book3.price = 10.5
Comments