fazedordecodigo / PyFlunt

Python implementation of Domain Notification Pattern
https://pypi.org/project/Flunt/
124 stars 4 forks source link

Adicionar validação de UUID (GUID) #11

Closed fazedordecodigo closed 7 months ago

fazedordecodigo commented 1 year ago

Nova Feature

Baseando-se na feature dessa lib: https://github.com/andrebaltieri/Flunt/blob/main/Flunt/Validations/GuidValidationContract.cs

fazedordecodigo commented 8 months ago

Métodos que serão adicionados:

fazedordecodigo commented 7 months ago

are_equals(self, value, comparer, key, message):

Análise

Diferente do .NET Python não possui sobrecarga de métodos, assim ao herdar a nova classe UuidValidationContract o método de mesmo nome não é acessível.

Iniciei algumas discussões nos fóruns da comunidade Python com o seguinte comentário:

Galera, boa tarde! Existe alguma forma de trabalhar com sobrecarga de metodos no Python?

Exemplo:

class A:
   def metodo (a:  str):
        print(a)

class B:
    def metodo (a: number)
         print(a)

class AB(A, B):
   pass

metodo = AB()

metodo.metodo("teste")
metodo.metodo(1)

Se não, qual a forma pythonica de resolver este problema?

Após isso, nosso querido @dunossauro deu algumas orientações, entre elas a do comentário abaixo:

Então, esse esquema de multimethods ou dispatch em python não é uma coisa muito comum.

Pq usamos duck typing. Exatamente o oposto dessa filosofia.

Existem formas de contornar isso. Uma delas é usando o singledispatch, mas ele é single. Funciona pra um único argumento. Pra mais que isso, temos o multiple dispatch

https://pypi.org/project/multipledispatch/

Sigo com as pesquisas para a melhor implementação.

fazedordecodigo commented 7 months ago

Um bom artigo sobre Duck Typing -> Link

Method Flexibility Error Handling Complexity
Duck Typing High Requires careful handling Low to Moderate
Abstract Base Classes Moderate Clear interface, easy error handling Moderate to High
Explicit Type Checking Low Straightforward error handling Low