esse ERRO é muito comum em Python, NUNCA MAIS REPITA ISSO
HTML-код
- Опубликовано: 13 сен 2024
- Python é uma linguagem cheia de surpresas, que você consegue fazer praticamente tudo e ela não reclama de nada. Isso tem seu lado bom e ruim. Uma das piores partes é que se torna muito fácil de gerar comportamentos inesperados (ou bugs) das mais diversas maneiras, justamente pela falta de barreiras da linguagem
Nesse vídeo dou um exemplo de um erro muito comum em Python, que se você entende como a linguagem funciona, pode evitar que ocorra. Além disso, deixo um desafio no final para vocês responderem e checar se sabem como os imports de Python realmente funcionam.
INFOPRODUTOS
Procurando uma fonte com fontes, tópicos para se aprofundar em algoritmos?
Guia de Algoritmos e Estrutura de Dados: go.hotmart.com...
REDES
Site: www.wainejr.com/
Instagram: / waine_jr
TikTok: / waine_jr
#Python #Django #programação #software #dev #bug
Voce vai ser grande.
Seu canal é de excelente qualidade, te desejo tudo de bom. Se eu tivesse um canal desse na época da faculdade....
Tenho nem roupa pra ouvir você elogiando assim. Valeu, Fiasco!
Dá mais vontade ainda de continuar produzindo, fiquei com receio de trazer vídeos mais "técnicos" assim, mas a recepção tá sendo mt melhor que esperava.
O primeiro "problema" é a implicidade da palavra static, ai os pythonistas falam mal que o java é verboso.
Sim, em Python o comportamento das variáveis e escopo é totalmente diferente de outras linguagens. Pior ainda é quando tem typo e você começa a usar variável que tinha sido declarada dentro de um for anteriormente kkkkk
Mas ainda vou mostrar umas mágicas que dá pra fazer com esse tipo de "feature"
mas java é verboso mesmo kkkk, porque não pode ter padrão static? Se o dev não estudou e fizer besteira, a culpa é do dev, não da linguagem.
@@waine_jr só fiquei com uma dúvida, composição resolveria? Eu ter um objeto com o dicionário e instanciar esse objeto dentro da classe funcionária em py?
@@natrodrigo mas eu acredito que as linguagens devem ser o mais intuitivas possíveis, o sort() do JS é ruim, não é funcionalidade, apesar de eu saber que ele ordena por ordem lexicográfica
@@murilohasse5694 se esse objeto usa um dicionário padrão pra sua construção, não. Mas se ele criar um novo dicionário no init, aí sim. Mesma lógica se você usa o mesmo objeto como default, ou constrói ele no init
Quando comecei meu projeto, utilizei dicas do GPT, e até hoje eu inicializo as propriedades de um objeto no __init__. Graças a DEUS nunca tive um erro desse, mas foi por pura sorte
Essas coisas tão graves o chatGPT nem deixa errar, parte ruim é que a gnt n tem oportunidade de aprender com o erro kkkkkkk
parabéns mano, bela explicação! vou compartilhar com a galera, tmjj e sucesso!
Valeu meu querido programador Python!
Excelente qualidade. Uso pra Dados e Scrapper e vai ser bem util! Obrigado!
Ótimo vídeo!
legal essa explicação, eu declaro tudo no init e nunca tive esse problema, existe algum cenario onde não é bom declarar no init?
Não tem nenhum problema não, mesmo que use um Pydantic ou dataclass, o que eles fazer por baixo dos panos é declarar no init o que você define a nível de classe.
Eu acho que o que causa esse problema, na verdade, é o jeito que o Python faz a busca do atributo. Quando você chama self.attr e ele não acha o atrfbuto na instância, ele sobe para procurar nos atributos da classe. E a situação ainda pode ser pior, se houverem superclasses das quais esta classe herda, ele vai subindo a hierarquia até encontrar o atributo kkkkk Se simplemente não tivesse esse upscaling e tivesse que acessar diretamente como self.__class__.attr ou tivesse um atributo self.cls próprio para isso acredito que ficaria mais explicito que é um atributo da classe e essa confusão não rolaria tanto
Sim, talvez se fosse mais explícito esse tipo de comportamento ficasse mais claro. Mas por outro lado é bom ter a mesma interaface pra um classmethod e pra uma função normal kkkkkk
Inclusive esse é outro ponto contra herança, um typo e você pega um atributo lá de cima ao invés da classe atual.
Não entendi pq o dataClass aí estava errado. Vou estudar dps. Tinha entendido q ele tinha como uma das funções dele poder simplificar isso e assim poder definir vars que seriam da instância, no msm escopo da classe. Inclusive faz um tempo q descobri essas libs no python. (dataClass, abstract etc) Literalmente não sabia q o python tinha isso 💀
Você tem que usar o default_factory porque senão todas as classes de Python que usam o dicionário default vão usar o mesmo dicionário, aí uma instância vai modificar as outras que usam esse dicionário tmb.
Essas bibliotecas de python acho mt boas pra quem vem de outras linguagens e tá acostumado a fazer declaração de variáveis a nível de classe, recomendo dar uma olhada no Pydantic, é super usada pra validação de dados e tem essa sintaxe.
Descobri isso, travando em uma questão de maratona de programação, fiquei em segundo lugar por isso.
É um dos erros mais comuns na linguagem. Agora eu aprendi que na dúvida uso deepcopy e NUNCA faço multiplicação de lista ou dicionário (tipo com [[1]] * 5), além de evitar usar dicionário e lista global
Fantástico!! Até eu, leigo em python, entendi!
Que massa, Thiago! Conhecimento chegando até nos engenheiros estruturais kkkkkk
Eu aprendi python usando __init_()
Pra min sempre parece errado definir campos de uma classe sem ele
É isso mesmo! Fora do init a gnt tem que saber oq tá fazendo se for usar
Muito bom
Segundo o Google. Sim, o valor vai se alterar. 😁
Obs: não sei python
Olha q eu acertei ein 😅
Chegou perto mesmo hahahahaha mas tinha que explicar o motivo