O exercício demonstrado é pratico, mas quis deixar que o usuario decida o que verificar então coloquei um menu para escolha do documento:
from cpfcnpj import documento
opc = "0"
while opc != "3":
opc = input("### MENU ###:\n(1) CPF\n(2) CNPJ\n(3) SAIR\nEscolha a validação:")
if opc == "1":
cpf_usuario = input("Digite o CPF a ser verificado sem pontos e traço: ")
obj_cpf = documento.cria_documento(str(cpf_usuario),"cpf")
print("O CPF {} é válido.". format(obj_cpf))
elif opc == "2":
cnpj_usuario = input("Digite o CNPJ a ser verificado sem pontos e traço: ")
obj_cnpj = documento.cria_documento(str(cnpj_usuario), "cnpj")
print("O CNPJ {} é válido.".format(obj_cnpj))
elif opc == "3":
print("Fechando aplicação")
else:
raise ValueError("Opção escolhida é inválida!!")
e na factory utilizar o tipo do documento, para ai fazer toda a validação
class documento:
@staticmethod
def cria_documento(documento, tipoDocumento):
if tipoDocumento == 'cpf':
return DocCPF(documento)
elif tipoDocumento == 'cnpj':
return DocCNPJ(documento)
else:
raise ValueError ("Tipo de documento não encontrado!!")
Assim fica visualmente mais atrativo e a numeração fica tod por input do usuario, pensando numa aplicação mais prática.