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

Комментарии • 30

  • @GrandeFiasco
    @GrandeFiasco 4 месяца назад +18

    Voce vai ser grande.
    Seu canal é de excelente qualidade, te desejo tudo de bom. Se eu tivesse um canal desse na época da faculdade....

    • @waine_jr
      @waine_jr  4 месяца назад

      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.

  • @murilohasse5694
    @murilohasse5694 4 месяца назад +8

    O primeiro "problema" é a implicidade da palavra static, ai os pythonistas falam mal que o java é verboso.

    • @waine_jr
      @waine_jr  4 месяца назад +1

      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"

    • @natrodrigo
      @natrodrigo 4 месяца назад +1

      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.

    • @murilohasse5694
      @murilohasse5694 4 месяца назад

      @@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?

    • @murilohasse5694
      @murilohasse5694 4 месяца назад

      @@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

    • @waine_jr
      @waine_jr  4 месяца назад +1

      @@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

  • @saulojosealmeidasilva9374
    @saulojosealmeidasilva9374 3 месяца назад +3

    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

    • @waine_jr
      @waine_jr  3 месяца назад +1

      Essas coisas tão graves o chatGPT nem deixa errar, parte ruim é que a gnt n tem oportunidade de aprender com o erro kkkkkkk

  • @programadorpython
    @programadorpython 4 месяца назад +3

    parabéns mano, bela explicação! vou compartilhar com a galera, tmjj e sucesso!

    • @waine_jr
      @waine_jr  4 месяца назад +1

      Valeu meu querido programador Python!

  • @patrickcruz1609
    @patrickcruz1609 4 месяца назад +2

    Excelente qualidade. Uso pra Dados e Scrapper e vai ser bem util! Obrigado!

  • @madaaz6333
    @madaaz6333 3 месяца назад +1

    Ótimo vídeo!

  • @Blacksheep877
    @Blacksheep877 4 месяца назад +2

    legal essa explicação, eu declaro tudo no init e nunca tive esse problema, existe algum cenario onde não é bom declarar no init?

    • @waine_jr
      @waine_jr  4 месяца назад

      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.

  • @lucasrocha912
    @lucasrocha912 3 месяца назад +1

    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

    • @waine_jr
      @waine_jr  3 месяца назад

      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.

  • @canalbomon
    @canalbomon 3 месяца назад +1

    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 💀

    • @waine_jr
      @waine_jr  3 месяца назад +2

      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.

  • @emanuelsilvaaraujo7862
    @emanuelsilvaaraujo7862 4 месяца назад +1

    Descobri isso, travando em uma questão de maratona de programação, fiquei em segundo lugar por isso.

    • @waine_jr
      @waine_jr  4 месяца назад +1

      É 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

  • @ThiagoAramac
    @ThiagoAramac 4 месяца назад +1

    Fantástico!! Até eu, leigo em python, entendi!

    • @waine_jr
      @waine_jr  4 месяца назад

      Que massa, Thiago! Conhecimento chegando até nos engenheiros estruturais kkkkkk

  • @Lucs-ku5cb
    @Lucs-ku5cb 4 месяца назад +1

    Eu aprendi python usando __init_()
    Pra min sempre parece errado definir campos de uma classe sem ele

    • @waine_jr
      @waine_jr  4 месяца назад +1

      É isso mesmo! Fora do init a gnt tem que saber oq tá fazendo se for usar

  • @utopic3382
    @utopic3382 4 месяца назад +1

    Muito bom

  • @edmarhenches875
    @edmarhenches875 4 месяца назад

    Segundo o Google. Sim, o valor vai se alterar. 😁
    Obs: não sei python

  • @miguesneto
    @miguesneto 4 месяца назад +1

    Olha q eu acertei ein 😅

    • @waine_jr
      @waine_jr  4 месяца назад

      Chegou perto mesmo hahahahaha mas tinha que explicar o motivo