Padrão 프로토타입 및 Python

6851 단어
O padrão Prototype é um padrão criacional, este tem como principal objetivo permitir que objetos sejam copiados sem que seus codigos fiquem dependentes de suas classes.

Este padrão de projeto determina que o próprio objeto é responsável pelo clonagem, facilitando assim o processo, uma vez que as classes podem possuir conteúdo que não pode ser copiado "de fora".

Python 코드 작성의 예




class SelfReferencingEntity:
    def __init__(self):
        self.parent = None

    def set_parent(self, parent):
        self.parent = parent


class SomeComponent:

    def __init__(self, some_int, some_list_of_objects, some_circular_ref):
        self.some_int = some_int
        self.some_list_of_objects = some_list_of_objects
        self.some_circular_ref = some_circular_ref

    def __copy__(self):
        # First, let's create copies of the nested objects.
        some_list_of_objects = copy.copy(self.some_list_of_objects)
        some_circular_ref = copy.copy(self.some_circular_ref)

        # Then, let's clone the object itself, using the prepared clones of the
        # nested objects.
        new = self.__class__(
            self.some_int, some_list_of_objects, some_circular_ref
        )
        new.__dict__.update(self.__dict__)

        return new

    def __deepcopy__(self, memo={}):
        # First, let's create copies of the nested objects.
        some_list_of_objects = copy.deepcopy(self.some_list_of_objects, memo)
        some_circular_ref = copy.deepcopy(self.some_circular_ref, memo)

        # Then, let's clone the object itself, using the prepared clones of the
        # nested objects.
        new = self.__class__(
            self.some_int, some_list_of_objects, some_circular_ref
        )
        new.__dict__ = copy.deepcopy(self.__dict__, memo)

        return new


Python은 "copy.copy"와 "copy.deepcopy"에 대한 프로토타입의 프로토타입 인터페이스를 제공합니다. A classe que desejar Personalizar estas cópias deve sobrescrever as funções "copy"e "deepcopy".

A função "copy.copy"é 고려 사항 "cópia rasa"e cria um novo objeto preenchendo-o com Referências para seus repivos itens no objeto original. "copy.deepcopy"는 반복적인 사용을 위해 사용됩니다.


참조
Padrões de Projeto (디오고 모레이라, 2020)
Mergulho nos Padrões de Projeto - v2020-1.14 (알렉산더 슈베츠, 2020)
copy in Python
Os codigos usados ​​como exemplo foram retirados do livro Mergulho nos Padrões de Projeto.

좋은 웹페이지 즐겨찾기