from abc import ABCMeta, abstractmethod


class ClasseAbstrata(metaclass=ABCMeta):

    def __init__(self):
        pass

    @abstractmethod
    def operacao1(self):
        pass

    @abstractmethod
    def operacao2(self):
        pass

    def template_method(self):
        print('Definindo o algoritmo: Operação 1 após Operação 2')
        self.operacao2()
        self.operacao1()


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')
    
    def operacao2(self):
        print('Minha operação concreta 2')



class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


cliente = Cliente()
cliente.main()

60670251c441d33420598157c8a83d0e49d4ff4b
<mask token>


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')

    def operacao2(self):
        print('Minha operação concreta 2')


class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


<mask token>

<mask token>


class ClasseAbstrata(metaclass=ABCMeta):

    def __init__(self):
        pass
    <mask token>

    @abstractmethod
    def operacao2(self):
        pass

    def template_method(self):
        print('Definindo o algoritmo: Operação 1 após Operação 2')
        self.operacao2()
        self.operacao1()


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')

    def operacao2(self):
        print('Minha operação concreta 2')


class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


<mask token>

<mask token>


class ClasseAbstrata(metaclass=ABCMeta):

    def __init__(self):
        pass

    @abstractmethod
    def operacao1(self):
        pass

    @abstractmethod
    def operacao2(self):
        pass

    def template_method(self):
        print('Definindo o algoritmo: Operação 1 após Operação 2')
        self.operacao2()
        self.operacao1()


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')

    def operacao2(self):
        print('Minha operação concreta 2')


class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


<mask token>

<mask token>


class ClasseAbstrata(metaclass=ABCMeta):

    def __init__(self):
        pass

    @abstractmethod
    def operacao1(self):
        pass

    @abstractmethod
    def operacao2(self):
        pass

    def template_method(self):
        print('Definindo o algoritmo: Operação 1 após Operação 2')
        self.operacao2()
        self.operacao1()


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')

    def operacao2(self):
        print('Minha operação concreta 2')


class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


<mask token>
cliente.main()

from abc import ABCMeta, abstractmethod


class ClasseAbstrata(metaclass=ABCMeta):

    def __init__(self):
        pass

    @abstractmethod
    def operacao1(self):
        pass

    @abstractmethod
    def operacao2(self):
        pass

    def template_method(self):
        print('Definindo o algoritmo: Operação 1 após Operação 2')
        self.operacao2()
        self.operacao1()


class ClasseConcreta(ClasseAbstrata):

    def operacao1(self):
        print('Minha operação concreta 1')
    
    def operacao2(self):
        print('Minha operação concreta 2')



class Cliente:

    def main(self):
        self.concreta = ClasseConcreta()
        self.concreta.template_method()


cliente = Cliente()
cliente.main()
