Python avançado | Kalob Taulien | Skillshare

Velocidade de reprodução


1.0x


  • 0.5x
  • 0.75x
  • 1x (Normal)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Assista a este curso e milhares de outros

Tenha acesso ilimitado a todos os cursos
Oferecidos por líderes do setor e profissionais do mercado
Os temas incluem ilustração, design, fotografia e muito mais

Aulas neste curso

    • 1.

      Boas-vindas ao Python 301!

      1:27

    • 2.

      Criando seu primeiro curso OOP

      5:11

    • 3.

      Propriedades do curso OOP

      5:57

    • 4.

      Métodos de aula OOP

      9:34

    • 5.

      Limpeza de aula OOP

      2:35

    • 6.

      Herança do curso OOP

      6:12

    • 7.

      interfaces de curso OOP

      3:41

    • 8.

      OOP

      8:31

    • 9.

      Métodos do OOP Dunder

      9:22

    • 10.

      Erros e exceções

      6:10

    • 11.

      Captura de exceções

      9:35

    • 12.

      o que são decoradores e como criar um

      7:09

    • 13.

      o que são geradores e como criar um

      12:19

    • 14.

      Pipenvs: um tipo de ambiente virtual

      8:25

    • 15.

      Seu projeto final

      20:09

    • 16.

      Resumo de Python 301

      1:00

  • --
  • Nível iniciante
  • Nível intermediário
  • Nível avançado
  • Todos os níveis

Gerado pela comunidade

O nível é determinado pela opinião da maioria dos estudantes que avaliaram este curso. Mostramos a recomendação do professor até que sejam coletadas as respostas de pelo menos 5 estudantes.

842

Estudantes

8

Projetos

Sobre este curso

Boas-vindas ao Python 301, onde você vai aprender avançado Python.

Neste curso vamos abordar esses temas principais:

  • Cursos (programação orientado para objetos)
  • Tente e exceto (solução graciosa de erro
  • Decoradores (funções dentro das funções)
  • Gerentes (processamento de dados performantes)

E seu projeto final vai ser um aplicativo bancário! Leia o projeto na seção do curso .

Conheça seu professor

Teacher Profile Image

Kalob Taulien

Web Development Teacher

Professor

Hi everybody! I'm Kalob Taulien.

 

Here's the TL;DR (short) version about me:

I have been coding since 1999 and teaching people how to code since 2013 I have over 350,000 web development students world-wide I'm on the Wagtail CMS core development team (Wagtail is Python's #1 most popular website making system) I try my best to answer EVERY question my students have  I love teaching — it's definitely one of my natural talents  Also I love goats! (Great conversation starter with me if we ever get to meet in person)

Below you can find all my Skillshare courses. The categories go from easiest to hardest, except for the Misc. Coding Courses at the very end. 

If you're brand new to coding, start with BEGINNERS WEB DEV.&nb... Visualizar o perfil completo

Level: Advanced

Nota do curso

As expectativas foram atingidas?
    Superou!
  • 0%
  • Sim
  • 0%
  • Um pouco
  • 0%
  • Não
  • 0%

Por que fazer parte da Skillshare?

Faça cursos premiados Skillshare Original

Cada curso possui aulas curtas e projetos práticos

Sua assinatura apoia os professores da Skillshare

Aprenda em qualquer lugar

Faça cursos em qualquer lugar com o aplicativo da Skillshare. Assista no avião, no metrô ou em qualquer lugar que funcione melhor para você, por streaming ou download.

Transcrições

1. Boas-vindas ao Python 301!: Olá e bem-vindo ao Python 301. Sou Caleb Colleen e serei seu instrutor hoje. Neste curso, vamos estar aprendendo sobre alguns conceitos Python mais avançados, como programação orientada a objetos, usando classes, tente exceto geradores, decoradores. E então, no final, vamos criar um aplicativo bancário para tirar o máximo proveito deste curso, você já deve estar um pouco familiarizado com Python. Você deve se considerar um nível intermediário ou um nível júnior, um programador Python. E você vai estar basicamente fazendo um pouco de lição de casa no final de cada lição, nós vamos estar aprendendo tudo sobre classes, propriedades, métodos, métodos defensor, herança de classe, classe interfaces, e todos os tipos de coisas entre elas. Então nós vamos ser graciosamente lidar com basicamente erros para que nosso programa não simplesmente pare de funcionar. Para que nosso programa possa lidar graciosamente com um erro e continuar trabalhando. E como eu mencionei antes, no final, vamos ter um projeto onde criamos um aplicativo, um aplicativo bancário onde você pode sacar ou depositar dinheiro usando Python. E então você vai registrar todas as suas transações em um arquivo de transação. Sou Caleb Colleen e trabalho com Python há alguns anos. Eu uso Python todos os dias, tanto profissionalmente quanto para Hobbes. E hoje vou ensinar-te Python avançado. Bem-vindo ao Python 301 com seu anfitrião e instrutor, Caleb Tallinn. 2. Criando seu primeiro curso OOP: Vamos começar a ler nossa primeira aula Python. Então, primeiro de tudo, você precisa Python instalado e você precisa ser capaz de escrever um pouco de Python para fazer uso deste módulo, para fazer uso de Python três, oh um. Então, na minha frente aqui eu só tenho código VS é apenas um editor de texto simples. Você pode usar PyCharm, você pode usar colchetes, você pode usar qualquer editor de texto que você gosta. Acabei de gostar do código VS. Então, na minha frente aqui, o que eu vou fazer é ir para o View e depois ir para o terminal e simplesmente abrir esse terminal. E isso vai me dar um terminal na parte inferior e meu visualizador de arquivos à esquerda. Vamos em frente e criar um novo arquivo aqui. E vamos chamar isso de primeira classe Dot Py. Então vamos dar uma olhada em escrever nossa primeira classe. Mas antes de fazermos isso, precisamos dar uma olhada em alguma sintaxe. Então, quando estamos escrevendo uma função, é como algo ao longo das linhas de d f, nome da função. Faça uma coisa. Uma aula é um pouco diferente. Agora, para instanciar uma função, nós simplesmente dizemos o nome da função, e é isso. Agora uma aula é um pouco diferente. Uma classe começa com a classe palavra, e isso vai criar o que é conhecido como um objeto. E em Python, tudo é um objeto de arquivo como um objeto. Uma função é um objeto. Uma classe não é objeto, mas eles são gerenciados um pouco diferente. Então, uma classe começa com a classe de palavra-chave e, em seguida, nós tipicamente dar-lhe nomeação maiúscula, ou pelo menos palavras maiúsculas são letras maiúsculas. Então dizemos algo como classe. Isto é um animal. E isso é literalmente tudo o que há para criar uma classe e, em seguida, para instanciar essa classe ou, ou para usar terminologia menos chique para ativar esta classe, dizemos que animal é igual a, este é um animal. Neste ponto, esta classe é completamente inútil, mas isso funcionará. Isso não vai nos dar erros. E podemos demonstrar isso entrando em nosso terminal e digitando Python de primeira classe dot py. E não vemos nenhum erro. Isso significa que isso está funcionando da maneira que queremos que funcione. Se você não vê erros, isso é uma coisa boa. Então vamos em frente e criar um exemplo da vida real aqui. Então este exemplo vai ser literalmente apenas um exemplo animal. E vamos usar este exemplo através de praticamente todo este módulo python 301 ou este curso. Então vamos em frente e criar uma nova classe. Nós dizemos classe. Damos um nome cólon, e então podemos fazer algo aqui. Agora, nas próximas lições, vamos falar sobre propriedades e métodos e coisas assim. Mas, por enquanto, vamos dar a isto uma propriedade simbólica. E isso é realmente apenas uma palavra chique para uma variável dentro de uma classe. E assim temos algo como uma propriedade. E isso é realmente palavras-chave não vão usar que vai usar como propriedade um é igual a algo. Então podemos instanciar esta classe ou ativar esta classe dizendo que o animal é igual a uma classe animal. Tem parênteses. Há muito como uma função. E então podemos dizer imprimir a propriedade animal dot um e você pode vê-lo audiófilos para mim usando VS Code. E então isso é muito parecido com um objeto de dicionário, mas um dicionário se parece com isso. Está procurando uma palavra-chave. Em uma classe usamos notação de ponto e esse ponto simplesmente significa vai ser algum tipo de classe e isso é algum tipo de propriedade ou uma variável dentro dessa classe. Vamos em frente e executar isso. E vemos que diz alguma coisa, o que quer que isto não esteja aqui. Agora podemos sobrescrever isso e vamos falar sobre isso em futuras lições. Podemos mudar isso completamente. Não temos que usar uma propriedade. Podemos literalmente nomear isto. Mais alguma coisa? Vou selecionar isto. Ir para exibir ou é a sua seleção, seleção adicionar próxima ocorrência. E vai selecionar os dois. Então eu posso escrever em dois lugares ao mesmo tempo. E posso dizer que isto é uma propriedade. E quando eu rodar isso de novo, ele simplesmente vai imprimir a palavra algo. E assim você pode ver que esses dois, quando eu, mesmo quando eu clico lá, destacado ao mesmo tempo, eles são casados. E para dar sentido a isso, criamos uma classe chamada animal, demos a ela uma propriedade, apenas uma propriedade chata e sem graça. Nós codificamos isso, então, na verdade, não é muito útil agora. Não há muito uso para isso. Então nós instanciamos essa classe e jogamos em uma variável. E fazendo isso, nós ativamos essa classe ou instanciamos essa classe. Então dissemos nessa variável ativar a propriedade. Isto é uma propriedade. Agora, isto é muito parecido com um dicionário. A sintaxe é um pouco diferente, mas isso é muito parecido com um dicionário. Então o que eu gostaria que você fizesse é criar um exemplo de classe Animal ou realmente qualquer tipo de classe. Dê a ele uma propriedade, codifique o valor, ative essa classe e imprima essa propriedade. Então, essencialmente, fazer o que eu fiz neste vídeo. Quando você terminar isso, vamos para a próxima lição, onde falamos sobre propriedades de classe um pouco mais em profundidade. 3. Propriedades do curso OOP: Bem-vinda de volta. Nesta lição vamos estar falando sobre propriedades de classe. Então, para continuar a nossa última lição, vou simplesmente copiar e colar o que temos da nossa lição anterior, que acabei de renomear do último vídeo. Só para que seja um pouco mais fácil gerenciar esses arquivos ao baixar o código-fonte. Mas eu vou basicamente pegar esse código exato e movê-lo para esta próxima lição, ele, e eu vou fazer isso avançando através do Python 301. Então, na última lição, falamos sobre isso ser uma propriedade. Temos uma classe, esta é uma propriedade e esta é codificada para ser a string, alguma coisa. Agora isso não tem que ser uma corda. Pode ser um booleano, uma lista ou um dicionário, ou pode ser literalmente qualquer coisa. Mas vamos fazer uso de algo que é um pouco mais complicado. Então vamos fazer uso de um dicionário. Então vamos ter uma propriedade aqui. Vai ser definido como uma forma de dicionário. E aqui podemos dizer T1 é então igual ao valor um. E então temos que instanciar isso. Fizemos isso na última lição. Usamos a variável após a classe animal ter sido instanciada. Esta é uma propriedade e isto vai imprimir um dicionário. Então, se eu rodar isso, ele imprime um dicionário. Agora sabemos que este é um dicionário, e neste ponto esta é apenas uma variável padrão. Não há nada de especial nisso. Acontece que há uma aula aqui. Em seguida, uma propriedade. Considere uma variável. E então para acessar uma chave como nós faria em um dicionário regular, nós apenas dar-lhe o nome da chave e que corresponde bem aqui. Então, quando eu salvar isso e executar novamente o script, podemos ver que ele diz valor um. E então vamos ver isso muito em Python nível profissional, vamos ver propriedade definida como dicionários. Isto é uma coisa muito comum. E então vai ser muito útil para você saber que esta é uma classe, esta é uma propriedade. E esta propriedade, seu tipo de dados ou sua estrutura, é um dicionário. O que significa que podemos procurar as coisas, mas não precisa ser necessariamente um dicionário. Poderíamos dizer que esta lista e eu só vou dar-lhe qualquer nome é igual a uma lista de nomes talvez. Então nós temos bengala, Caleb, e Gully, que é um gatinho bonito, na verdade não é literalmente um gato muito grande. E então poderíamos dizer, imprimir o animal, esta lista. E quando voltarmos a fazer isso, vamos ver aqui embaixo, diz Cain, Caleb, e Gully, e aparece como uma lista. Agora, porque esta é uma lista que podemos fazer indexação e fatiamento e coisas sobre ela apenas como uma variável de lista normal apenas acontece de ser ele está dentro de uma classe. Isso é realmente tudo o que há para ele. Então, se quiséssemos obter, digamos gully, lembre-se que as listas começam em 0. Então este é 0 índice um, índice, dois índice. Nós diríamos esta lista. Parênteses difíceis para, e isso vai imprimir a palavra Gulley ou o nome Gully para nós, apenas assim. Agora, quando se trata de atribuir propriedades automaticamente, podemos fazer isso com essa coisa chamada método defensor, um método de sublinhado duplo. Vamos falar sobre isso em sua própria lição particular. Também podemos usar funções como propriedades, e isso fica um pouco mais avançado. Vamos falar sobre isso na próxima lição. Então, nesta lição, o que eu gostaria que você fizesse é criar uma classe, dá-la a propriedades. E em vez de usar apenas uma string ou um número ou algum tipo de tipo de dados simples. Usar um novo tipo de tipo de dados não são um novo, mas uma estrutura de dados mais complexa. Então o primeiro deve ser um dicionário e o segundo deve ser uma lista. E, em seguida, tente acessar esse dicionário alistar-se de dentro da classe. Agora uma coisa divertida que podemos fazer porque linguagens de programação temos essas coisas chamadas propriedades privadas. Python não tem privado ou público. É tudo meio acessível. Então o que nós também podemos fazer é imprimir animal dot esta lista. E isso simplesmente vai, em vez de jogar a classe em uma variável, vamos acessar essa propriedade por sua classe diretamente. Então, se formos em frente e executarmos isso, vamos ver impressões da nossa lista para nós como esperamos. Então não há privado, não há público, nada assim. Eu sei PHP e Java e todas essas outras linguagens têm isso. Python não tem isso. Oh, e mais uma coisa, na verdade, eu não deveria esquecer isso. Você vai ver isso o tempo todo. Sempre que vir uma propriedade, comece com um sublinhado como este. Esta é uma propriedade privada. Então é assim que nos safamos em Python, vez de dizer que isso vai ser privado, como em algumas línguas, usamos literalmente a palavra privado. Começamos com um sublinhado. E quando começamos com esse sublinhado, estamos simplesmente dizendo que esta é uma propriedade privada. Não aceda de fora da classe, por isso não aceda desta forma. Só deve ser usado internamente. Agora não sabemos como usá-los internamente ainda. Então vamos aprender sobre isso nas próximas lições. Mas o que eu gostaria que você fizesse é ir em frente e dar uma chance, experimentar isso. Crie um dicionário de classe animal, lista, propriedade privada e instancie sua classe. Imprima algo do seu dicionário ou listas, e então tente imprimir diretamente daquele animal, aquela classe animal. Uma das propriedades sem instanciá-lo e sem jogá-lo diretamente em uma variável. Então, há duas maneiras de fazer isso. Vá em frente e dê uma chance. Experimente isso. Por favor. Experimente isso. Isso é importante porque quando você entra no mundo de, por exemplo, machine learning ou até mesmo apenas Django web framework. Você vai ver aulas em todos os lugares. É importante saber como as aulas funcionam em Python. Felizmente, eles são muito fáceis de aprender. Então, na próxima lição, vamos em frente e falar sobre métodos de classe. 4. Métodos de aula OOP: Olá, olá, olá. Nesta lição, vamos em frente e falar sobre métodos de classe. Métodos de classe. Honestamente, é apenas um termo chique para uma função dentro de uma classe. E assim parece exatamente como uma função. Há apenas uma diferença distinta aqui. Então vamos em frente e nos livrar dessa variável privada que é apenas da última lição. E vamos criar um novo método. Então este é um método. Isso é tudo o que há e isso parece exatamente como uma função padrão. E assim será tudo um método é, é uma função dentro da classe. Agora uma coisa a observar aqui é que em um método padrão dentro de uma classe, seu primeiro parâmetro é sempre self. Agora, se você vem de um plano de fundo JavaScript, você vai ver isso, ou o PHP também usa isso. No PHP usa algo assim. Eu então recebo um sinal de dólar isto e depois uma flecha. Javascript usa a palavra-chave this. Em Python, usamos a palavra-chave self. E o que isso faz é quando dizemos eu, podemos agora imprimir auto-ponto e temos acesso a tudo. E você pode ver o código VS é preenchido automaticamente. Isto para mim, temos auto-ponto. Este é um método, esta é uma propriedade, esta lista. Então vamos em frente e imprimir esta lista. Escrevemos um método aqui. Agora vamos em frente e ativá-lo. E para ativá-lo ou executá-lo. Vamos instanciar esta classe de animais porque esta é a melhor prática. Em vez de acessar animal por conta própria, jogamos em uma variável. Então dizemos o ponto da coruja de anime. Este é o método parênteses. E ao contrário de uma função em que vemos um argumento de palavra-chave ou um argumento posicional requerido aqui como eu, não temos que fazer isso, podemos simplesmente ignorá-lo. Então, mesmo que eu seja usado dentro da classe, fora da classe, nós completamente 100% ignorá-lo como se ele não existisse. E isso é só dizer que porque este é um objeto de classe dentro daqui, ele vai ter acesso a tudo dentro da classe. E a razão pela qual fazemos isso é para que não tenhamos que colocar constantemente novos argumentos. Então não teríamos que dizer essa lista. Isto é propriedade, et cetera, et cetera, et cetera. Nós não temos que passar essas coisas constantemente porque nós teríamos que colocar em uma lista aqui. E então este próximo vai ser um dicionário lá já definido aqui. Nós não temos que passar isso, então eu vou desfazer isso e simplesmente executar, este é um método. Imprima, esta lista. E novamente, eu está se referindo ao animal. Esta lista de propriedade, classe, propriedade. Vamos em frente e executar este Python 301 lição três métodos de classe, e ele imprime para nós. Então, com a palavra-chave self, temos acesso a outros métodos, outras propriedades, todas as outras coisas boas dentro desta classe. Ainda não temos acesso a outras aulas. É apenas esta classe em particular e é a isso que eu está se referindo. Self está se referindo à classe animal em que estamos trabalhando. Em seguida, também podemos definir propriedades usando métodos. E novamente, para resumir isso em termos mais leigos, podemos criar uma variável de classe baseada em uma função de classe. Vamos em frente e criar uma função ou um método chamado get. Caramba. Ele vai tomar eu como seu primeiro parâmetro, sempre faz. E nós poderíamos retornar porque é basicamente uma função, auto-idade, esta lista. E então Gully é o número dois, seu índice é 012. Agora, quando tentarmos conseguir isso, vamos ter que dizer: “ Get caramba com parênteses”. Agora, se isso é suposto agir como uma propriedade em vez de uma função, digamos que não há nada aqui e ele apenas deveria retornar um pedaço simples de dados. Podemos usar uma coisa chamada decoradora, sobre a qual falaremos no futuro também. E dizemos apenas na propriedade. E o que isso vai fazer é dizer, qualquer tipo de lógica aqui, qualquer lógica e este método poderia ficar enorme, embora pudesse ser uma 100 linhas de código aqui se quiséssemos. Sempre vai colocar isso em uma propriedade. E quando esta é uma propriedade, nós abandonamos os parênteses. Agora, porque estamos usando a palavra-chave return apenas como uma função, isso não vai realmente fazer nada. Este é um método aqui em cima, é realmente imprimir. Neste caso, vamos tornar isso um pouco mais complexo. Vamos usar um método como uma função regular e realmente retornou algo. Então podemos dizer que ravina é igual ao animal, pegar ravina. E isso nos permitirá usar isso mais tarde para que possamos imprimir. O dedo mais fofo de todos os tempos é o Golly. Vamos em frente e executar isso. E vamos fazer com que isto seja impresso em coisas diferentes. Vai imprimir. Este é um método porque ele está executando este que vai imprimir. E então nós vamos imprimir o Gatto mais bonito se todo o tempo é galé. E olha para isso. Ele imprime nossa lista exatamente como fez no primeiro exemplo, no segundo exemplo e na nossa segunda declaração de impressão. Esta é a nossa classe, esta é a nossa propriedade. E você pode ver que na verdade parece muito com uma função, mas tem um decorador nele, basicamente dizendo, hey, mesmo que este seja um objeto executável, ou o que chamamos de chamável. Trate-o como se não fosse um chamável, tratado como se fosse uma propriedade padrão como esta lista. E isto é uma propriedade. E porque usamos a palavra-chave return, vai ser capaz de então jogar isso em uma variável, qualquer nome de variável. E então podemos usar essa variável na estrada. Agora vamos dar uma olhada em mais um exemplo. Vamos, vamos criar um exemplo onde adicionamos um nome a esta lista. Então aqui podemos dizer morte, porque vamos criar um método. Adicionar nome. Ele sempre vai tomar a si mesmo e o nome vai ser o parâmetro que vamos adicionar. Em seguida, podemos escrever auto-ponto, este ponto lista anexar esse nome. E nós podemos, se quisermos retornar qualquer auto-idade, esta lista como toda a nova lista porque tudo o que fizemos foi pegar uma lista. Se você esquecer o eu por apenas um segundo, ele se parece com uma lista regular, list.append. Isso apenas acontece de estar acessando de fora da função ou do método. Então, temos propriedade de classe. É uma lista para que possamos usar ponto append nela. Vamos acrescentar o nome aqui. E então ele vai devolver esta lista para nós. E vamos ver isso muitas vezes. Então vamos em frente e comentar esse código. E digamos que o ponto antimalware. E como é que lhe chamámos? Chamamos de adicionar nome e leva um nome. Ignore eu. O Self sempre entra lá, mas ignoramos. Adicionar Nome e, em seguida, o nome vai ser ruibarbo. Então, se quiséssemos, poderíamos imprimir ao animal esta lista. E nós vamos ver que esta lista agora tem Doo-doo-doo veio Caleb Gully, e ruibarbo. E então estamos adicionando dinamicamente coisas às nossas propriedades agora usando um método. Vá em frente e execute isso. E diz Caim, Caleb Gully e ruibarbo como esperado. E novamente, tudo o que estamos fazendo aqui é usar tipos de dados, tipos dados padrão Python dentro de uma classe. E então nós estamos encapsulando ou, você sabe, para resumir isso porque nós gostamos de nossas grandes palavras como desenvolvedores, incentivos encapsulam, Pense nisso como conter. Então, tudo o que estamos fazendo é conter todo esse código em uma classe. E a ideia aqui é que estamos agrupando funções e variáveis ou métodos e propriedades. Estamos agrupando-os numa coisa chamada animal, uma classe chamada animal. E a idéia aqui é que todos eles estão relacionados de alguma forma. Então, o que eu gostaria que você fizesse como sua tarefa para esta lição é criar um animal de classe. Criar uma propriedade, torná-la uma matriz, ou torná-la uma lista, uma lista Python. Em seguida, escreva um método para não adicionar algo, mas para excluir algo dessa lista. Então, em vez de adicionar, ele poderia ser chamado remover nome. Lembre-se de tomar auto como seu primeiro parâmetro um 100% do tempo que ele sempre decola. Dentro deste, um método particular, podemos então acessar auto ponto, qualquer que seja a sua lista é chamada, ponto remover e, em seguida, o nome. E então aqui em baixo podemos dizer, bem, nós instanciamos isso. Esta é a nossa classe, este é o nosso nome de método. Então o seu seria chamado remover nome, e então o nome para remover. E então você pode imprimir a lista inteira novamente e ver que ela foi de fato removida. Na próxima lição, vamos em frente e limpar isso. Então isso parece um pouco mais de perna, um exemplo do mundo real porque agora isso é um código confuso e isso é apenas um código tutorial. Isto não é bom. Vamos criar um exemplo real de uma classe animal na próxima lição. 5. Limpeza de aula OOP: Eu escrevo, tirando dessa última lição, o que vamos fazer é limpar isso um pouco e criar um pouco de uma instância animal real, ou às vezes chamamos a instância de classe porque é uma instância de uma classe. E nós vamos basicamente nos livrar de tudo isso e vamos criar uma classe animal adequada. Então, que tipo de coisas não tem animal? Um animal tem uma cor de pele. E vamos dizer que para uma cor vai ser laranja, então um animal também tem ações que pode tomar. Que tipo de ação não pode tomar poderia def, comer, poderia fazer alguma coisa. E lembre-se, nós sempre nos colocamos aqui. Também podemos fazer Chase surda porque vai perseguir sua comida. Digamos que isto é como um tigre ou um queijo ou algo assim. E isso também vai tomar a si mesmo como seu primeiro parâmetro. Então nós instanciamos essa classe, vamos chamar isso de tigre é igual a e animal. E então podemos fazer aquele tigre. Podemos fazer um IIT. Poderíamos fazer Chase, imprimir sua cor de pele ou podemos fazê-lo, vamos fazer isso. Def fale. Ele vai tomar auto e isso vai simplesmente imprimir rar, rar, animal dot talk. E então, quando executamos isso, quando executamos lição Python para limpeza de classe, ele vai imprimir rar, assim como esperamos que agora isso não é nada que ainda não tenhamos coberto. E se você está apenas pisando no Python 301 e você é uma espécie de novo no Python e você está apenas imaginando o que isso passa. Isso significa simplesmente não fazer nada além de permitir recuo. Porque se não tivermos este passe aqui, vamos em frente e ver que tipo de erro de recuo vamos ter. Recebemos um erro de recuo esperado um bloqueio recuado após surdo Chase. Na verdade, ele está procurando por ele aqui, fazendo o seu melhor para descobrir onde ele está. Mas nós simplesmente colocamos passe lá dentro. Agora esta é uma classe muito genérica e honestamente não há nada de super útil nisso. Mas na próxima lição vamos falar sobre herança de classe. Portanto, não há tarefa para esta lição. Eu só queria te mostrar que eu vou limpar isso um pouco. Na próxima lição, vamos estender essa classe animal e vamos criar, digamos, um tigre real ou um tipo diferente de animal. E então podemos sobrescrever o método de fala, o método de perseguição. Poderíamos adicionar todo tipo de coisas a ele. Então, quando você terminar de me ver limpar esse código, vamos para a próxima lição em que falamos sobre herança de classe. 6. Herança do curso OOP: Isso é herança. Então, uma das coisas realmente legais por trás do Python, ou eu acho que realmente qualquer classe em qualquer idioma, não precisa ser python. Mas o bom de uma aula é que podemos estendê-la. E então, em vez de apenas dizer animal de classe e, em seguida, ter outra classe chamada tigre e outra classe chamada gato casa. Poderíamos, em vez de termos que avaliar, falar, comer perseguição por uma cor repetidamente, podemos simplesmente estendê-la. E então o que eu vou fazer aqui é me livrar disso e criar uma nova classe. E este vai chamar-se tigre. E entre parênteses, vai estender o animal. E posso entrar aqui para literalmente não fazer nada. E é automaticamente porque está estendendo essa classe animal aqui em cima. Ele vai automaticamente obter a cor da pele, falar método, método de comer e método de perseguição. Então o que eu posso fazer é agora escrever tigre é igual a uma classe Tiger. Tigre doublespeak, e em vez de escrever, animal é igual a uma classe animal ou tigres igual a uma classe animal. Agora podemos dizer que Tiger é igual a uma classe Tiger e então o tigre fala. Então vamos executar este código e ver o que acontece aqui. Corra menos de cinco. E diz Rawr. Agora só por diversão, vamos em frente e imprimir isso. Vamos ver que tipo de tipo é este. Tipo de impressão, tigre. E vai dizer rar, mas também vai dizer tigre principal. Isto é diferente do animal. Se trocarmos isso por animal, vamos ver que vamos como RAR ou o animal principal da classe. E então trocamos isso. Agora, o que é bom nisso é que podemos sobrescrever tudo aqui. Então, em vez de dizer, fale cru ou podemos dizer outra coisa. Surdo, fala, leva a si mesmo. E o que é esse tigre que íamos dizer, lá cresceu certo? Como Tony, o Tigre. Ok. Talvez não seja a melhor piada que já fiz. Mas vamos em frente e executar isso e vamos ver que realmente vamos nos livrar dessa linha. Não precisamos mais disso. Quando executarmos isso, não vai mais dizer rar porque estamos instanciando a classe Tiger. Tem que falar. É a herança da classe. Ele também tem falar. Qual deles vai correr. Bem, porque estamos instanciando a classe Tiger e estamos sobrescrevendo falar, isso vai funcionar. Então, ele vai dizer a sua taxa como esperado. Vamos em frente e criar mais um exemplo e vamos criar uma classe de gato casa. Também vai se estender a partir de um animal. E quando superestimarmos a conversa, vamos fazê-lo dizer. E isso é tudo o que vamos fazer lá. E em vez de falar tigre, tigre, ainda podemos manter isso instanciado se quisermos. Ele não está fazendo nada, então nós poderíamos realmente apagá-lo por. Vamos, vamos mostrar-lhe um exemplo em que temos uma classe de tigre e uma classe de gato caseiro. Então podemos agora escrever gato é igual a gato casa, gato ponto falar. E vamos também escrever tigre, doublespeak. E um vai dizer que eles são ótimos e o outro vai me salvar. E vamos em frente e executar isso. E esta é a regra e miau. Agora, neste momento, você provavelmente está pensando, bem, isso não é bom. Quero dizer, eu poderia muito bem escrever uma aula regular de gatos de casa e não estender de animal se eu estou substituindo a única coisa que estou usando de qualquer maneira, se é isso que você está pensando. Sim. Você está absolutamente certo. Vamos ir em frente e olhar para isso para a cor embora. Vamos imprimir ponto de gato para cor. E vamos ver se isto é laranja. Eles são grandes miau, e diz laranja. Mas podemos sobrescrever isso. Podemos dizer que a cor da pele é igual ao preto. Vamos salvar isso e executar isso novamente. E agora vai dizer preto. E assim, por padrão, herdou laranja como sua cor de pele apenas como um padrão. Então é uma espécie de planta. E então mudamos isso para uma cor para este gato de casa em particular ser preto. Agora, essencialmente, o que estamos fazendo aqui é que estamos criando algum tipo de blueprint com essa classe, e isso é chamado de interface. Na próxima lição, vamos falar sobre interfaces e o que elas são e como as implementamos e a razão pela qual as escrevemos. Mas, por enquanto, o que eu gostaria que você fizesse é criar uma classe chamada animal. Você pode já ter um. E então eu quero que você amplie essa aula. Quero que herde essa aula. Escrevendo seu novo nome de classe. Estenda animal colocando animais entre parênteses aqui entre parênteses. E então você pode sobrescrever atributos ou suas propriedades. Você também pode sobrescrever seus métodos. E então eu quero que você instancie aquele gato caseiro ou qualquer animal que você escolher usar. E então qualquer método que você escolheu para sobrescrever se é falar, comer, talvez algo novo em folha. Talvez seja algo que esteja fora do que você viu neste módulo até agora. Quero que o execute. Gato Dot falar. Vai me imprimir. E então eu quero que você, como você substituiu uma de suas propriedades aqui, eu também precisarei imprimir essa propriedade. E então aqui eu só imprimi não para cor. E novamente, é muito, muito importante que você aprenda como as aulas funcionam. Porque em frameworks como o Django web framework, nós vamos estar usando um monte de classes. E é importante saber que mesmo que você não saiba que animal Hamlet é o zíper lá em cima. Só desmoronou isso então, digamos que você não sabe o que está dentro do animal. Você seria capaz de, de alguma forma, sobrescrever o que está dentro do animal. Você, você seria capaz de explorar e descobrir, oh, um animal tem uma cor de pele, mas eu quero sobrescrever isso. Tem um método de falar. Ok? Sim, sim, ele tem um método padrão de falar, mas eu quero sobrescrever isso também. Então, quando você terminar isso, vamos para a próxima lição em que falamos sobre interfaces de classe. 7. interfaces de curso OOP: Vamos ter uma conversa sobre o que é uma interface. Então, essencialmente, se você quiser resumir, uma interface de classe é literalmente apenas um blueprint. E então tudo o que está dizendo é que vai haver algum tipo de propriedade. Haverá algum tipo de métodos ou apenas um método e é simplesmente suposto implementar algo. E na última lição criamos um tigre e um gato caseiro. Vamos apagar isto por um segundo. Vamos criar novos. E vamos trabalhar apenas com este animal. E tipicamente quando você vê uma interface, você vai ver que há algum tipo de método e ele vai passar. Ou você vai ver algo como aumento, não erro implementado. E vamos dar um exemplo melhor aqui. Vamos estender animal, vamos fazer aula. Casa gato vai estender a classe animal e simplesmente passar. Isso é, então, instanciar aquele gato da casa. Então podemos dizer gato casa é igual a anfitrião Kat ou gato é igual a gato casa. E então poderíamos fazer o ponto do gato. E qual é que sobrescrevemos aqui? Bem, não sobrescrevemos nada, mas sabemos que vai herdar automaticamente o discurso da classe Animal. Então vamos em frente e falar. E vamos rodar este arquivo. Esta é a lição seis interfaces classe, e ele diz que não implementado. Agora a idéia aqui é que você simplesmente tem um plano e é quando você usa isso. Você deveria implementar isso. Se você quiser usá-lo, você tem que implementá-lo. E assim, para se livrar deste erro não implementado ou se ele está apenas passando está retornando nenhum. Poderíamos simplesmente dizer “def speak”. Ele vai tomar auto como seu único parâmetro, parâmetro obrigatório dentro de uma classe. Imprima, miau. E então o que isso está fazendo aqui é dizer, hey, gato caseiro vai usar a interface animal ou este projeto. Se tentarmos usar falar bem, não há nada implementado, então temos que implementar isso. E porque nós estendemos animal, nós sobrescrevemos falar para que isso não funcione mais. Então você pode pensar nisso assim. Pegamos essas duas linhas e é muito parecido com isso. Boom, nós simplesmente substituímos. Mas a interface ou o plano é simplesmente para nos dizer que é suposto ser implementado. Então, quando salvarmos isso e executamos isso novamente, não vamos obter um erro não implementado. Vamos agora obter a impressão, como esperado. E então esse é praticamente o único papel de uma interface. E interfaces é um blueprint que diz, hey, se você quiser usar o método de fala ou qualquer método, você tem que implementá-lo você mesmo. Mas só para você saber, sempre que você estender a partir dele, gato casa sempre terá o método de falar e é nosso trabalho como desenvolvedores para substituí-lo. Agora, sua tarefa para esta lição é criar uma interface. Então, se você já tem uma classe animal, se você tem seguido junto com Python 301, você provavelmente não tem classe animal já. Vá em frente e em vez de usar falar, Vá em frente e levantar um erro não implementado em comer ou perseguição, ou outra função ou método de sua escolha. Estenda essa classe ou herde essa classe, crie uma nova. Eu só criei um chamado gato casa, e então sobrescrever esse método. Você já deve ter feito isso uma vez antes. Não é má ideia voltar a fazê-lo. Desta vez estamos implementando uma interface com erro não implementado. Em seguida, vamos falar sobre a super função. 8. OOP: Então, muitas vezes você vai ver com as classes que porque podemos estender uma classe, você vai, você vai ser capaz de acessar uma função acima dela. Então pense nisso como abaixo e animal está acima. E então, se pensarmos nisso como uma hierarquia, que é como eu gosto de pensar sobre isso. Estamos simplesmente substituindo o discurso, que foi o que fizemos na última lição. Mas se quiséssemos, poderíamos executar o que quer que esteja aqui. Então, em vez de sobrescrever falar, vamos sobrescrever comer. Então, em nossa interface animal, vamos em frente e imprimir. Eu estou comendo. Yum, yum, yum. E porque estamos estendendo o gato caseiro de animal, agora podemos instanciar aquele gato da casa e podemos dizer “comer”. E já fizemos isso algumas vezes. Então não vamos ver nada de novo aqui. Diz que estou comendo yum, yum, yum. E mesmo que o gato da casa não tenha um método nele, as classes que herdam do animal, ele o tem. Então estamos autorizados a usar isso. Agora vamos dizer que queríamos sobrescrever o método eq, mas também queríamos executar o código que está aqui. Vamos fazer dois exemplos aqui. Def, coma auto, imprima. Estou comendo salmão. E quando reexecutamos este gato dot eat, bem nós substituímos o método original de interface eat. E então tudo o que vamos ver agora é que estou comendo salmão. Mas e se, por alguma razão, quiséssemos também executar isso? O que nós poderíamos fazer é que nós podemos tipo de bolha para cima. Então lembre-se que este é o fundo, este é o topo. Podemos bolhar até a classe animal e executar comer. Agora, há duas maneiras de fazer isso. Há o caminho certo e o caminho errado. A maneira errada é escrever animal dot eat. Porque isso não é instanciado em uma variável ainda ou qualquer coisa apropriada. Quero dizer, podemos acessá-lo tecnicamente, mas realmente não devemos fazê-lo assim. E então o caminho certo é simplesmente dizer super. É um ponto de função comer. E se houver algum tipo de parâmetros extras aqui, nós simplesmente combinamos os parâmetros. Não temos parâmetros, não temos que passar por nós mesmos. Está em uma classe que já sabe que está sendo passada automaticamente. E então o que isso vai dizer é obter a classe que está acima dela, a classe Animal, isso é o que super está fazendo aqui. E, em seguida, execute o método de comer. Então vai pegar aquela classe animal do que aquele método de comer. E então ele vai executá-lo para nós porque nós dissemos comer com parênteses, certo? Eles são executados. Vai imprimir, estou comendo yum, yum, yum. E então ele vai imprimir, eu estou comendo Sammy, vamos em frente, salvar isso e tentar isso. E vamos ver se faz exatamente o que estou descrevendo aqui. Estou comendo yum, yum, yum, yum, eu estou comendo salmão. E então tudo isso fez de novo foi bolhar até aquela classe animal. Executar ponto comer. O que quer que esteja aqui pode ser uma impressão digital, pode ser qualquer coisa. Ele executará tudo lá dentro. E depois escrevemos o que mais queríamos. E novamente, isso pode ser qualquer lógica que você queira escrever qualquer coisa. Não importa se é uma declaração impressa. Pode ser matemática, pode ser um raspador de teia. Pode ser o que quiser. Agora vamos em frente e fazer mais um exemplo com o Chase, mas vamos adicionar algumas palavras-chave aqui. Então, na nossa classe animal, temos perseguição surda, auto. E o que vamos perseguir? Vamos perseguir uma gazela. É isso que queremos perseguir. Vamos perseguir e animal. E isso vai imprimir, eu estou perseguindo um animal. E vamos ter certeza que o animal por padrão é uma gazela. Espero estar soletrando direito, talvez não. E quando eu descer aqui, Cat ab.js agora vai, porque nós ainda não implementamos isso por conta própria. Está vindo da interface. Vai dizer que estou perseguindo o que quer que seja o animal, que por acaso é uma gazela por defeito. É ir em frente e executar isso. E diz que estou perseguindo uma gazela. Agora também podemos passar uma palavra-chave aqui. O gato pode estar perseguindo um rato. Vamos em frente e executar isso. E diz que estou perseguindo o rato. Inglês engraçado lá, eu estou perseguindo uma gazela ou um rato ou algo assim. Agora, para implementar Chase , podemos fazer, fazer, escrever def, chase, self, animal. Vai coincidir com o que vemos aqui em cima. O animal por padrão vai ser gazela, mas vamos sempre passar em um animal, então não vamos fazer este argumento de palavra-chave. Então vamos dizer “Super Ponto Chase”. Vamos passar aquele animal aqui em cima, seja lá o que for. Então ele vai dizer que eu estou perseguindo por padrão porque eu, mas talvez seja o animal está perseguindo um rato. Estou perseguindo um rato. E então poderíamos imprimir animal foi pego e poderíamos usar cordas f se quiséssemos, ou apenas uma declaração de impressão regular. Isso realmente não importa neste momento. Estes são apenas exemplos. Vamos em frente e executar isso. E isso vai comandar o gato dot Chase, que é aqui. Vai ser super até este. Vai dizer que estou perseguindo um, seja lá o que for o animal. Por padrão, é gazela se não for fornecida. E aqui estamos dizendo que é necessário. E depois vamos passar isso. Vamos em frente e executar isso. E está faltando uma palavra-chave aqui. Então vamos em frente e jogar mouse como uma palavra-chave aqui. E não uma palavra-chave, mas um argumento posicional obrigatório. Vamos fazer isso mais uma vez. E diz que estou perseguindo um rato. Mouse foi pego e então perseguições agora fazendo o que a interface está nos dizendo que vai fazer. Em seguida, borbulhámos usando o método super ou a função super. Nós dissemos, hey, onde quer que isso esteja se estendendo de qualquer classe que está se estendendo dos EUA que então executam o método de perseguição e nós simplesmente passamos em animal. Então os animais realmente fazendo um monte de travessias por aqui. Passamos em animais uma corda aqui. Ele vai então entrar aqui, em seguida, vai para aqui. Então vai ser substituído aqui. Então, em vez de gazela vai ser Mouse e nós vamos simplesmente imprimi-lo. Então, estamos movendo dados um pouco. E isso é muito comum em Python. Na verdade, é comum em todos os idiomas baseados em classes. Então isso tudo acontece antes mesmo de chegar a imprimir animal foi pego e, em seguida, ele imprime animal foi pego. Agora, este é um conceito um pouco complicado para envolver sua cabeça ao redor. Então o que eu gostaria que você fizesse é criar uma nova classe de interface que você pode chamar de animal apenas, eu gostaria que você escrevesse do zero. Como uma boa prática, você sabe. Então crie como uma interface animal, faça-a perseguir algo e simplesmente faz uma coisa. Então estenda esse animal. Eu estendi o meu para ser o gato da casa. O seu pode ser um tigre, uma chita, um elefante. Isso realmente não importa. Apenas certifique-se de estendê-lo, sobrescrever esse método Chase e usar esta super função nele. E lembre-se super simplesmente vai dizer, oh, ok, isso está se estendendo de um animal de classe. É a nossa interface que está aqui em cima. E depois vai dizer “Chase”. Então agora está falando sobre esse animal que é super perseguição. Esse é o método aqui. Ele vai então imprimir, eu estou perseguindo um animal de algum tipo, e então executar algum código por baixo dele. Nós estamos usando apenas declarações de impressão simples, mas você poderia realmente usar lógica Python adequada se você quisesse. Você poderia adicionar números. Você pode raspar um site, você pode fazer praticamente qualquer coisa. Estamos apenas aderindo a algo bastante simples para colocar nossas cabeças em torno da idéia de programação orientada a objetos. Uma vez que você tenha feito isso, vamos passar para a próxima lição em que falamos sobre métodos de defesa. E sob método essencialmente nos permite tomar ação automática. E, por exemplo, nosso animal sempre tem uma cor de pele laranja. Mas e se estivermos usando um elefante? Bem, então teríamos que escrever a primeira cor aqui. Acho que vai ser cinza. Ou vamos ter que levar aquele gato da casa. E nós vamos dizer gato, cor de pele é igual a cinza. E neste ponto estamos apenas trabalhando com variáveis. Isso não é maneira de viver sua vida. Podemos jogá-lo aqui quando está sendo instanciado. Falaremos sobre isso na próxima lição. 9. Métodos do OOP Dunder: Vamos falar sobre métodos defensores. E então o que eu estou dizendo aqui é d, u e d são pêlos e o que isso significa é sublinhado duplo. E então estes são métodos mágicos que vêm com a classe. Se você já está familiarizado com aulas em outro idioma, você vai estar familiarizado, na maioria das vezes com métodos de pêlo. E nós somos métodos mágicos como eles são chamados em algumas outras linguagens de programação. Então vamos voltar para o nosso animal aqui, e vamos criar um método defensor chamado init. E começa com DEF sublinhado, sublinhado em TI, sublinhado, sublinhado. É um método, então ele sempre toma self como seu primeiro parâmetro. E então poderíamos dar-lhe qualquer outro parâmetro. E isso pode ser para cores. E então pode fazer uma coisa. E o que isso nos permite fazer é inserir código aqui embaixo, que estamos estendendo. Agora podemos colocar uma cor de pele aqui e deixar que a cor pode ser cinza, por exemplo. Agora, no momento isso não vai fazer nada, mas se executarmos esse código, vamos ver que não vai haver um erro. Não há nenhum erro que vai aparecer. Vai ser legal, legal. Está fazendo exatamente o que fizemos na última lição. Mas o que estamos dizendo agora é que podemos passar em um argumento posicional necessário. Vamos seguir em frente e executar isso sem cinza lá dentro, mesmo que o init esteja aceitando para cor. E vemos falta um argumento posicional necessário. Agora vamos recuar um segundo. O que uma malha está fazendo aqui? Init é simplesmente dizer que quando você instanciar esta classe, quando você ativar esta classe, mesmo que ela esteja sendo estendida ou herdada em outra classe, agora precisamos passar algo e isso vai ser executado antes de qualquer outra função. E assim, sempre que usamos sublinhado, sublinhado init, o que isso está dizendo é lançar em algum tipo de parâmetro ou parâmetros ou argumentos, e que vai ser executado automaticamente para que não tenhamos que então digitar cat underscore, underscore init, cinza, algo assim. Vai fazer isso automaticamente por nós. E assim podemos digitar cinza aqui. E vamos em frente e vamos demonstrar que isso vai ser executado antes de todas as nossas outras funções. Imprimir para cor é para cor sublinhado. E vamos usar uma corda F aqui. E diz que para cor é cinza, então ele executado, eu estou perseguindo um rato. Linda executada Rato foi pega. E então há uma ordem de operações aqui. Agora o init é de longe o mais comum que você vai ver. E isso simplesmente significa que podemos trabalhar com para cores. Agora, por padrão, que para uma cor vai ser laranja. Vamos nos livrar disso. Nós não precisamos mais disso e nós podemos simplesmente, porque nós sabemos que isso vai ser executado primeiro, nós podemos simplesmente dizer auto ponto para cor é igual a para cor. E o que isso nos permite fazer é então usar cor self.view em qualquer outro método que queremos usar, seja na classe animal ou na classe herdada ou uma classe estendida, ele vai automaticamente atribuir isso para nós. Então vamos nos livrar dessa impressão digital. E vamos criar outro método aqui. Def obter para cor auto. E vamos simplesmente imprimir auto-ponto para cor. Agora, na maior parte, você pode ignorar tudo isso porque nós não vamos usá-los neste vídeo. O que vamos fazer é criar uma classe. Lançar automaticamente a cor da pele vai, em seguida, atribuir cor self.view. Podemos então, uma vez que instanciarmos esta classe, podemos fazer ponto gato obter para cor. Este é um método, por isso leva parênteses. E o que isso vai fazer é porque não há nenhum método de obtenção para cor em nosso gato casa, mas há um na interface animal vai executar isso, e ele vai simplesmente executar qualquer cor que colocamos aqui. E apenas como um exemplo melhor, vamos escrever isso. Pegando a cor. E isso vai dizer “ficando para a cor”. Cinza. Diz comprar um cinza colorido. Vamos fazer laranja ou um ACH ou correr. E vai dizer “comprar uma cor laranja”. E então o que é bom sobre isso é que agora podemos usar a super função. Então podemos dizer def em nossa aula estendida. Auto para cor super devido a fazer init. E isso vai levar a primeira cor também. E então o que sempre que instanciamos um gato doméstico, como estamos fazendo aqui embaixo, vamos sobrescrever essa função init, esta aqui em cima. Mas em vez de apenas substituí-la, nós realmente queríamos fazer tudo para fazer por padrão. Digamos que estávamos felizes com essa lógica. Nós não queremos sobrescrevê-lo, nós simplesmente queremos estender a partir dele. Então vamos permitir que cor self.view seja atribuído. E então podemos, se quiséssemos imprimir algo como cor de pele foi salvo para o objeto de classe. E então poderíamos fazer outra coisa aqui, se quiséssemos. Mas também vais ver isto muito. No nível profissional Python, você sempre vai ver e iniciar ou não sempre, mas muitas vezes você vai ver uma rede e às vezes você vai nos ver sobrescrever. E então nós estamos substituindo isso aqui e nós estamos dizendo na verdade, nós queremos substituí-lo, mas nós também queremos usar a lógica regular que vem com ele, seja lá o que for. E depois queremos fazer outra coisa. Então digamos que não queremos necessariamente sobrescrever o tipo de animal toda vez. Poderíamos dizer aqui em cima, tipo animal é igual a desconhecido. E nós poderíamos forçar esse tipo de animal na casa gato auto-idade tipo animal é igual a hospedeiro Kat. Vamos em frente e imprimir auto-ponto tipo animal. Então, neste momento, estamos usando o init. Estamos usando um Dundee onde você está usando uma declaração de impressão super regular. Vimos que um trilhão de vezes já estavam forçando esse tipo de animal a não ser passado para o init. Não está lá de qualquer forma. Por padrão, é desconhecido. Mas porque é um gato caseiro, queremos codificar isso. Queremos dizer que o gato da casa sempre será o gato da casa. Não importa o que façamos, ele sempre será host Got It não é mutável. E assim não jogamos o gato da casa aqui. Nós estamos simplesmente dizendo instanciar gato casa e ele vai ter um tipo animal de gato casa lá dentro. E vai imprimir isso e executar isso. E diz que a cor foi salva no objeto de classe. Isso é bem aqui em cima. Correu super lá em cima. Então nós fazemos, fazemos, fazemos, fazemos, fazemos. Sabemos que a cor self.view é acessível e temos acesso a isso em todos os nossos métodos. Então dissemos que o tipo animal é um gato de casa e imprimimos esse tipo de animal. E assim a primeira declaração de impressão, gato casa é a segunda declaração de impressão. Onde está ali, diz gato de casa, e que combina aqui em baixo palavra por palavra, letra por letra. E então ficamos com a cor da pele e dizemos que é laranja. E isso está vindo daqui devido a, devido a fazer obter para a cor. E nós simplesmente definimos isso para a cor em uma malha. Isso está ficando bem avançado. Python, para ser honesto. Mas estamos passando aqui dizendo “eu” para a cor. E então, em um método, estamos acessando a cor self.view. Agora, se você está olhando para este vídeo, coçando a cabeça, ficando legal. Não entendo uma única coisa que acabou de ser dita. O que eu gostaria que você fizesse é experimentar isso. Eu quero que você experimente isso até que faça sentido porque você vai ver isso em todos os lugares, especialmente em Python nível profissional. Isso é muito importante que entendamos ambos os métodos super e pêlos. Agora, nesta lição, estamos realmente falando sobre o método de jantar e o método na rede como uma recapitulação, simplesmente significa executar isso antes todos os outros métodos dentro de nossa classe. Podemos anular isso. Podemos usar super nele. Podemos fazer o que quisermos. É muito parecido com um método normal, como falar. Acontece que é executado primeiro automaticamente e esses parâmetros são jogados diretamente na instanciação da classe. E agora isso parece muito com uma função com um parâmetro. A única diferença é que esta é uma classe e isso será automaticamente acessível em todo o resto da nossa classe. Quero que tente isso. Por favor, gaste pelo menos dez minutos nisso e apenas mexa com um par, mesmo que você não consiga fazê-lo funcionar, é bom gastar esses dez minutos nele. E só porque o cérebro é projetado, mesmo se você lutar com ele, está tudo bem. É uma boa prática, independentemente. Vá em frente e dê uma chance por cerca de dez minutos. Se isso não funcionar em 10 minutos, fique à vontade para seguir em frente. Você terá muito tempo no futuro para praticar usando métodos de pêlo e super. 10. Erros e exceções: Bem-vinda de volta. Vamos parar de falar de aulas. Podemos passar umas oito lições juntos a falar de aulas? E sim, eles são importantes em Python, eles são extremamente importantes em Python, mas há outra coisa que é extremamente importante em Python mais avançado, e é assim que podemos gerenciar o fluxo de erros. Então fazemos essa coisa, tentamos uma coisa, exceto outra coisa. E o que isso simplesmente está fazendo é dizer, tente um bloco de código. E se houver um erro, faça outra coisa. Então é muito parecido com uma declaração “if else”. A única diferença é que procura erros. E então vamos dar uma olhada em um simples tri-aceitar. E assim a sintaxe se parece com isso. Vamos tentar um pedaço de código. E então vamos tentar. Total é igual a um dividido por 0. Agora, se entrarmos em nosso shell Python e fizermos um dividido por 0, vamos ver que isso nos dá um erro de divisão 0. Não é possível dividir por 0. Matematicamente, é apenas um desses papéis que não foram autorizados a fazê-lo. Então o que podemos fazer agora é aceitar qualquer tipo de exceção. E podemos dizer que o total vai ser 0. Imprima o total. E isso é realmente tudo o que há para uma tentativa e exceto bloco em Python. O importante, em, o importante aqui é que ele vai tentar um pedaço de código. Se ele falhar, ele levanta algum tipo de exceção como o que vemos aqui, um erro de divisão 0. Ele então vai pular esta linha de código e tudo abaixo dela. Isso não será executado simples como que, em seguida, vai aparecer para fora deste bloco e, em seguida, vai tentar executar a exceção. E então, quando executamos esta lição Python nove, erros e exceções, eu não soletrei exceções corretamente, a propósito, eu tenho que corrigir isso. Isso vai me incomodar. Exceções melhores. Vemos que o total aqui em baixo é 0 e isso é porque ele está recebendo 0 aqui. E como exemplo, vamos fazer isso. Imprimir tentando um dividido por 0. Vamos levar isso para o topo. E então vamos imprimir algo por baixo. Isto não vai aparecer. E vamos imprimir mais um aqui. Exceção foi capturada. Vamos fazer isso mais uma vez. E diz tentar um dividido por 0. Isto não vai aparecer, não apareceu no nosso guião aqui em baixo. E diz que a exceção foi capturada. Agora, neste momento, você deveria estar pensando, oh, Deus, onde eu vou usar AS eu espero que você esteja fazendo essa pergunta e se você está fazendo essas perguntas, vamos passar para um exemplo adequado aqui. O que acontece se pedirmos ao usuário alguma entrada? Então peça um número. Vamos dizer entrada. O que é um número? Então vamos nos certificar de que isso é sempre um número. Então vamos dizer que num é igual a, e vamos lançá-lo como um inteiro. Então, não importa o que alguém digita aqui, será sempre um número, será um número completo. E vamos imprimir isso, imprimir num. E quando executarmos isso, qual é o número? Vamos escrever dez. E só tem dez. Legal. Mas o que acontece se alguém não escrever um número? Bem, isso ainda vai ficar armazenado nesta variável. Vamos então tentar lançar esse número como um inteiro. E se não for um inteiro? E se escrevermos Python 301? Recebemos um erro de valor. Literal inválido para int com base dez. Basicamente, o que está dizendo é que não pode transformar uma corda em um número com uma base de dez. Mas o TL, DR, o conto aqui é que ele simplesmente falhou. Não conseguimos imprimir isto. Não podíamos trabalhar com isto. Então, o que fazemos? Pedimos um número. Tentamos lançar isso como um inteiro. Se não funcionar, podemos fazer exceto todas as exceções. Podemos então dizer que o número vai ser desconhecido e simplesmente imprimi-lo. E isso vai nos permitir imprimir esse número, que não fez antes, porque errou e vai dizer desconhecido. Então vamos tentar isso. Qual é o número? Python 301. E diz “desconhecido”. Se executarmos isso de novo, dado um número real, ele diz que o número é dez. E então o que isso fez foi dizer, oh, na verdade, não podemos gerenciar seu erro de valor. Python simplesmente não sabe como transformar uma string em um número corretamente, uma forma que é previsível para você, o programador. E então ele lança uma exceção. Nós pegamos essa exceção e sobrescrevemos um para ser desconhecido, e então nós apenas imprimimos. Este é um caso de uso muito bom porque e se você está tentando fazer algo e não sair do jeito que você espera. Agora, o que eu gostaria que você fizesse é experimentar isso. Você pode tentar com o primeiro exemplo. Este aqui em cima onde tentamos dividir um por 0, simplesmente não funciona. Ou você pode tentar este exemplo, que é o que eu prefiro porque ele está mais perto de ser um exemplo da vida real. Peça alguma entrada. Tente converter esse número como um inteiro, pegue a exceção, substitua o número e imprima. E a próxima coisa sobre isso é que estamos entrando em simples manipulação de erros e fluxo de erros. E novamente, o que é importante sobre isso é que em nosso primeiro exemplo, se olharmos aqui, nosso código simplesmente morreu. Não havia como se recuperar disso. E então tudo o que estamos fazendo com um try-exceto IS captando graciosamente esse erro e gerenciando-o para que nosso script não morra para que nosso código possa continuar executando da maneira que deveria ser executado. Vá em frente e tente isso. É um exemplo bem simples. Então isso só deve levar alguns minutos quando estiver pronto. Vá para a próxima lição, onde falamos sobre pegar algumas novas exceções. Vamos pegar exceções particulares. 11. Captura de exceções: Vamos falar sobre capturar exceções específicas e descobrir qual exceção está lançando e como podemos gerenciar várias exceções. Então vamos criar um exemplo aqui, e isso só vai ser recriado a partir do último exemplo. Vamos dizer que algum tipo de número é igual a entrada, digite um número. Então podemos tentar mudar esse número em um número, porque quando pedimos entrada, ele sempre volta como uma string. E podemos aceitar essa exceção fazendo o que quisermos. E digamos que este número será desconhecido. E vamos simplesmente imprimir o número quando acabarmos com ele. Vamos em frente e executar este script. Isto é menos de dez. Digite um número, dez, imprime dez, digite um número. Python. Diz que o número é desconhecido. No primeiro exemplo, nós inserimos um número dez, ele voltou como uma string. E int foi capaz de digitar isso para um inteiro. Então, funcionou perfeitamente bem. No segundo exemplo, digitamos Python. Essencialmente, foi isso que fizemos. Agora não podemos transformar uma palavra em um inteiro, só não funciona. Python não sabe o que Python, esta string se opõe a se transformar em como um número. Não de uma forma previsível, então lança uma exceção. Agora, quando a exceção é lançada, dissemos que o número vai ser desconhecido. Agora, como sabemos qual é essa exceção? Podemos descobrir o que essa exceção é digitando exceto exceção como E. Print exceção foi capturado. E então podemos imprimir o tipo de E. Vamos continuar e executar isso de novo. E vamos digitar python como nosso número. E diz que a exceção foi capturada classe ValueError, e é desconhecido. Então agora o que podemos fazer é aceitar especificamente um erro de valor. Então, podemos adicionar outra exceção aqui, exceto um erro de valor. número de impressão não era um número válido. E vamos tentar isto. Isso tem várias exceções aqui. Então vamos digitar Python tem um número, e ele diz que Python não era um número válido. E depois imprimiu aqui em baixo. Python é o que escrevemos. Não foi possível convertê-lo para um número ou um inteiro. Então dissemos que qualquer que seja esse valor não é um número válido. Agora isso é muito parecido com uma declaração if else, if, else if. Então ele vai tentar algo como uma declaração se. Se, em seguida, detectar este erro em particular, ele não vai executar nenhuma outra exceção aqui. Só vai executar esta exceção em particular. E agora temos uma maneira de lidar com um erro de valor específico. E se quiséssemos fazer algo com este número? Digamos que num foi perfeitamente aceito, reduz o número dez, e então queríamos dividi-lo por outro número. Então vamos criar uma segunda entrada. Vamos chamá-lo num para inserir um segundo número. E vamos dividir estes. Então vamos dizer num dois é igual a int num dois. E o total será NUM dividido por m2. Agora se num1 e num2 são ambos capazes de ser convertidos em um inteiro. O total vai correr. No entanto, se um destes não pode ser convertido em um inteiro, ele vai então lançar um erro de valor. Vamos então pegar esse erro de valor com uma exceção e imprimir qualquer número que não fosse um número válido. E, na verdade, pode não estar entorpecido. Pode estar entorpecido. Então vamos dizer entorpecido ou entorpecido para não eram números válidos. E vamos tentar isto. Digite um número. Vamos fazer 100. E seu segundo número, dez. Ok? Sem erros. Isso é uma boa notícia. E se fizéssemos o primeiro número para ser 100 e o segundo número for 0. Bem, na última lição tentamos dividir por 0. Não podemos fazer isso. E assim podemos ver que a exceção foi capturada. Ele não executou um erro de valor porque nenhum erro de valor foi lançado em nós. Então não podemos pegar esse erro. Mas houve outro erro ou outra exceção que foi lançada em nós que podemos, em seguida, exceto em seguida, ele imprime exceção foi capturado. Imprime o tipo da exceção. E trabalhamos com um número, o que não precisamos mais fazer. Podemos querer trabalhar com totais em vez disso. E eu não sei. Agora, quando ele imprime Tipo II, ele diz classe ZeroDivisionError. O que podemos fazer é pegar isso por conta própria também. Podemos dizer exceto 0, erro de divisão, números de impressão não poderia ser dividido div eu fiz. E vamos nos livrar disso. Vamos tentar de novo. Digite um número dez e seu segundo número 0, e ele diz que os números não podem ser divididos. Não há nenhum erro de valor lançado desta vez. Isso significa que ambos foram capazes de, ambos esses números, num1 e num2 foram ambos lançados em inteiros perfeitamente bem. Portanto, não houve erro de valor para capturar. Então pulou isso. Mas então ele disse total é igual a entorpecido um dividido por num2, dez dividido por 0. Bem, você pode dividir qualquer coisa por 0, nós temos um erro de divisão 0. Então dissemos, ok, tente pegar um erro de valor se ele existir, se não existir, vamos tentar pegar o ZeroDivisionError. Então pegamos aquele ZeroDivisionError e imprimimos outra coisa. E como este foi executado, a exceção genérica na parte inferior não foi executada, este código foi simplesmente ignorado. Então Python vai escolher uma dessas exceções, qualquer que seja a certa. E ele vai executar uma dessas avenidas de código. Ele sempre, sempre, sempre tentar executar este código. E se houver algum erro, ele vai verificar se foi um erro de valor. Verifique se foi uma verificação de erro de divisão 0 para ver se era uma exceção geral de algum tipo que não estamos detectando explicitamente. E assim, neste momento, estamos pegando um erro de valor, erro de divisão 0. Ou se há algum tipo de outro ar que é desconhecido para nós, então podemos trabalhar com isso. Agora, eu digo tentar pegar porque eu venho de outras linguagens de programação também. Em Python dizemos tentar, exceto que é exatamente a mesma coisa, apenas uma palavra-chave diferente. E você vai ver tentar, exceto em todo lugar em Python profissional. E a razão para isso de novo é porque queremos tentar algo. E se houver um erro, se não tentarmos aceitar esse erro, nosso código simplesmente morrerá. Não queremos que isso aconteça. Queremos que continue a executar, queremos que continue, continuando. E então nós captamos graciosamente cada um desses erros, ou nós, em geral, pegamos cada erro, cada exceção, e trabalhamos com ele. E isso só significa que nosso código pode continuar funcionando. Não vai errar em nós. E isso significa que todo o nosso código aqui ainda será executado. E isso é uma boa notícia. Porque e se você estiver construindo um programa como o bot de raspagem da Web do Google, e ele chega a um site e ele está tentando raspar um endereço de e-mail específico e verificar o endereço de e-mail. E talvez esse endereço de e-mail não exista. Como se fosse, passou. Pensamos que não era um endereço de e-mail, mas não é um endereço de e-mail real. Bem, se o Google Boston não detectasse esse erro, ele simplesmente morreria e então alguém teria que reiniciá-lo. E você teria alguém no Google o tempo todo apenas digitando Python scrape internet, Python scrape internet, Python scrape internet, Python Stream Internet. E nosso trabalho como programadores é se pudermos nos automatizar fora de um trabalho. E então ele vai, talvez, tentar obter um endereço de e-mail ou outro site. Vai tentar fazer alguma coisa. E se não puder, talvez salte. Talvez tente um pedaço de código diferente. Talvez tente fazer outra coisa. E então não temos alguém do outro lado de um computador digitando Python. Raspar internet dot py, Python raspar internet dot py, Python raspar internet dot py. Toda vez no Arizona, ele vai lidar automaticamente com isso para eles. E esse é o poder por trás da tentativa e exceto que você pode aceitar qualquer tipo de erro. Estes apenas aconteceram para ser erros de palavra-chave jogados exatamente do Python. Podemos criar o nosso também, se quisermos. E então podemos lidar graciosamente com um erro. E isso significa que nosso código será executado para sempre sem problemas. Agora o que eu quero que você faça, eu quero que você experimente isso, escreva algum tipo de exemplo, e você pode roubar meu exemplo se quiser, onde você tentar algum código e você exceto um erro, um tipo de erro específico. Em seguida, você aceita outro tipo de erro. E então você aceita apenas uma áreas gerais. Mesmo certifique-se de imprimir o tipo E para que você possa lidar com isso mais tarde. Vá em frente e escreva este tri complexo exceto bloco, e quando você estiver pronto, vamos para a próxima lição. Boa sorte, e te vejo lá. 12. o que são decoradores e como criar um: Vamos falar sobre decoradores. Agora, se voltarmos a uma lição em particular, é um desses métodos. Sim, podemos ter uma coisa chamada decoradora. E um decorador é simplesmente uma função que envolve outra função. E nesta lição vamos criar nosso próprio decorador Python. Então vamos sair disso e criar um novo arquivo Python. Vamos chamar de menos de 11. Deco leu as excursões naquele corredor. Então tipicamente temos algum tipo de função, myFunc. E isto vai simplesmente imprimir o meu nome é Caleb. Então podemos correr Myfunc assim. Isto é Python, um para um aqui. Legal. Isso funciona muito sem graça, muito chato. Isso não está em uma aula. Isso não está em uma tentativa. Apanhar-nos não está a fazer nada de novo. Mas digamos que queríamos escrever um decorador que tipicamente se parece com isto. Deck ou um Tor tem o símbolo at e, em seguida, o nome de uma função. E tudo o que vai fazer é executar uma função chamada decorador e jogar esta função dentro dela para que possamos executar algo antes ou depois automaticamente. Então vamos em frente e criar um decorador. E assim podemos criar o meu decorador. E isso vai ter uma função como myfunc. Myfunc vai ser jogado lá como uma função inteira, não como uma variável, mas tem uma função. Então, estamos passando funções para funções neste ponto. Então nós podemos criar algum tipo de wrapper e nós tipicamente vemos a palavra rapper. Isto é muito, muito comum. Imprima. Faça alguma coisa aqui. Em seguida, podemos executar essa função, o que quer que seja, imprimir função original está terminado. E vamos simplesmente devolver o rapper. E assim esta é uma função dentro de uma função. Nós realmente vimos isso, eu acho que foi em Python 201, onde podemos colocar uma função dentro de uma função. E isso era essencialmente um decorador naquele momento. E então o que estamos dizendo aqui é que meu decorador vai tomar uma função como seu único parâmetro. Ele vai então registrar uma nova função chamada rapper vai fazer uma coisa, executar essa função original. Estamos falando de escopo estranho neste ponto em JavaScript, isso é chamado de fechamento. Execute a referida função, seja qual for a função, e então imprima outra instrução. Por último, devolvemos o invólucro. Então agora há duas maneiras de decorar uma função. Vamos nos livrar disso aqui em cima porque sabemos que MyFunc vai simplesmente imprimir meu nome é Caleb. Podemos chamar esta nova função é igual ao meu decorador. E porque é preciso uma função, vamos jogar no MyFunc. Agora note que não temos os parênteses aqui. Nós não estamos executando myFunc onde simplesmente jogá-lo como uma função por si só, não como uma função executada, assim como o objeto função. Então podemos dizer novo func, executar isso como sua própria função. Vamos em frente e experimentar isso. E diz para fazer alguma coisa aqui. Meu nome é Caleb, a função original está terminada. E realmente isso é tudo o que há para um decorador. Agora vamos em frente e fazer isso de uma maneira mais pitônica e sem fio mais moderno. Corte isso e vamos movê-lo para cima. E vamos decorar myfunc com meu decorador. E porque estamos usando esse tipo de sintaxe, não precisamos mais envolver isso aqui. Podemos simplesmente escrever o meu func. Vamos em frente e nos livrar disso. E vamos digitar myfunc. Myfunc, a minha função aqui está decorada com o meu decorador. Vai passar isso automaticamente. Isso vai registrar wrapper, imprimir uma coisa, fazer uma coisa, imprimir a função original está concluída. Devolva esse invólucro. Vamos em frente e salvar, e vamos fazer isso. E funciona da mesma maneira agora isso é muito pitônico. Eu gostaria mais desse jeito. Você vai, você vai ver isso provavelmente mais frequentemente do que não. E tudo isso é, é exatamente o mesmo que a primeira função. Não a função, mas o primeiro exemplo. E tudo o que estamos dizendo é: “Ei, use o símbolo “at “aqui como decorador. Envolva meu decorador em torno da minha função. Então ele vai executar meu decorador em algum lugar dentro de lá. Vai executar a função original. E então podemos fazer algo antes ou depois ou nada se não quisermos, podemos literalmente não fazer nada. Quero dizer, seria inútil decorador não fazer nada. Mas podemos fazer algo antes e depois, o que nos torna muito, muito poderosos. Por que faríamos isso? Bem, porque às vezes temos uma função e simplesmente gostamos do que ela está fazendo. E nós simplesmente queremos adicionar um pouco de lógica extra a ele, um pouco de funcionalidade extra. E assim nem sempre queremos mudar nossa função original, mas talvez queiramos pegar essa função original e estendê-la. Então, é muito parecido com herança de classe, onde pegamos uma classe regular e depois a herdamos em uma nova classe ou a expandimos em uma nova classe. Isso é pegar uma função e estender com meu decorador. Agora este é um decorador muito, muito, muito simples, mas ele leva o exemplo através. Então o que eu gostaria que você fizesse é que eu quero que você crie um decorador e eu quero que você o use dessa maneira. Não o use da forma baseada na função, a maneira original que você vai ver de vez em quando. Mas esta é a maneira mais pitônica. Então crie uma função, chame de minha decoradora. Seu único argumento será a função em si, não a função executável, apenas o nome da função. E então basicamente nós reatribuímos um nome de função como uma variável aqui. Dentro disso, você vai precisar registrar uma outra função. Faça uma coisa, execute essa função original, faça uma segunda coisa, e retorne essa função interna. Então temos funções dentro de funções. Você quer retornar essa função interna, em seguida, criar outra função, apenas uma função normal. Pode ser uma declaração de impressão , pode ter alguma lógica real. Posso fazer o que quiser e decorá-lo no meu decorador. Significa que é um decorador. Meu avaliador deco combina com o nome da função decoradora. Vá em frente e execute myfunc com e sem o decorador. Por exemplo, se eu me livrar do decorador e executar isso, ele imprime uma linha. Se eu colocar o decorador de volta e repetir isso, ele imprime três linhas. Quero que vá em frente e dê uma chance. Não é muitas vezes que você vai realmente criar seus próprios decoradores. Você vai mais ou menos usá-los. Mas mesmo a possibilidade de você entrar em como código aberto ou Python realmente avançado, então você vai estar criando seus próprios decoradores. E é muito importante saber como isso funciona e a ordem em que as coisas acontecem. Por exemplo, temos algo acontecendo antes da nossa função, depois da nossa função. Vá em frente e experimente isso e quando estiver pronto, vamos para a próxima lição. 13. o que são geradores e como criar um: Bem-vinda de volta. Vamos falar sobre geradores. Então, um gerador é, é realmente, um conceito muito interessante. Então, por exemplo, se você tiver uma lista, então LST é igual a 123123 serão armazenados na memória o tempo todo. Agora vamos dizer que esta lista tem 10 milhões de números nela, que se você está entrando em ciência de dados, um poderia ter 10 milhões de números nele e você não quer armazenar tudo isso na memória porque então você tem que aumentar a RAM em seu computador. E seu computador vai precisar, basicamente seu computador vai ficar muito caro se você apenas jogar hardware nele. Um gerador é uma forma de software de dizer fazer algo com o primeiro número, em seguida, fazer algo com o segundo número, em seguida, fazer algo com o terceiro número, e ele não se importa com o que veio antes ou depois dele. Agora, um gerador é normalmente colocado em algum tipo de função. Então poderíamos dizer def myfunc para algum tipo de número em um intervalo, já varia um gerador em Python três. Então 14, por exemplo, imprimir num. E quando executamos myfunc, Python Lição 12, Isso não vai fazer nada porque está na função. Vamos tentar mais uma vez. Lá vamos nós. Diz 012345678910111213. Ok. Nada mal. Sabe, só estamos trabalhando com 14 números. Isto não é tecnicamente um gerador. Mas digamos que quisemos fazer algo grande, como fazer com que isso sempre devolva todos esses números ao expoente de si mesmo. Então nós faríamos entorpecido para o expoente de num. Então, por exemplo, dez para o poder 1013 para o poder de 13. E em vez de retornar, que só vai ser executado uma vez, como, vamos tentar isso. Isso não vai funcionar. Vamos fazer total é igual a myFunc e, em seguida, imprimir o total. Aparece com apenas um número. E se quiséssemos vários números? E se estivermos trabalhando com números realmente grandes? Um deles disse que poderíamos usar a palavra-chave chamada yield. E o rendimento vai fazer é dizer que esta função não é mais apenas uma função atinge um gerador, vai percorrer cada número de 0 a 13 e vai produzir qualquer que seja esse número. Dois, o expoente de si mesmo. Agora vamos em frente e imprimir isso. E vemos quando imprimimos o meu func, é um gerador. Agora novamente, lembre-se gerador só vai funcionar um número de cada vez. Então, em nosso primeiro exemplo em que era apenas uma lista, ele sabe sobre os números 0 a 13. E de uma forma técnica, podemos acessar esses números. Mas se estamos trabalhando com números realmente grandes, não queremos isso. Ou se estamos trabalhando com grandes conjuntos de dados, queremos usar um gerador. Então é só lidar com a tarefa em mãos. Não é lidar com nada que veio antes ou está vindo atrás dele. E então a idéia aqui é que você está, você está escrevendo código, isso é desempenho de memória. Então, se está fazendo 14 para o poder de 14, não se importa com 13 para o poder de 13, não se importa com 12 para o poder de 12. Só vai fazer isso uma vez. E quando você tentar acessar esse número, então ele vai fazer as contas. Então é meio preguiçoso. Só vai fazer as contas quando for exigido. Não vai fazer isso logo de cara. Não vai tentar guardar tudo isso na memória. A única coisa que vai fazer é armazenar 14 para o poder 14 na memória e depois passar para o próximo número. Vai fazer 15 para o poder 15 e esquecer totalmente os 14. Agora, no típico Python, digamos que você está fazendo Python para web, você não vai ver rendimento muito, mas na ciência de dados você vai vê-lo muito, muito. E é muito importante que saibamos como isso funciona. Vamos mudar o nome de MyFunc para o meu gerador. E vamos nos livrar disso. E agora podemos dizer para um, não vamos usá-los. Digamos que o grande numero no meu gerador. E então vimos aqui em baixo que este era um objeto gerador. Podemos passar por esses números e imprimi-los para imprimir Big Num. E vamos em frente e executar isso. Agora, isso é tão rápido com Python. Nós nem vamos notar o que está acontecendo. Mas o que estava fazendo era a primeira iteração, depois a segunda iteração para a terceira iteração, depois a quarta, quinta até a última iteração. E você percebe como esses números estão ficando bem grandes. Na verdade, não se importa com o que veio antes ou depois. E o que é importante sobre isso é que podemos fazer com números muito, muito grandes. Então vamos fazer um número realmente grande como 50 para o poder de 50. E vamos ver se isso possivelmente falha no meu computador. Olhe para isso. Foi capaz de fazer tudo isso muito facilmente. Então eu acho que eu estava preocupado com isso travar o meu computador sem motivo. Mas foi capaz de fazer toda essa lógica com bastante facilidade. E então a idéia é, você sabe, quando chegou a 49, ele só funcionou em 49. Não precisava se lembrar do que 4993, onde não precisava se importar com o que está por vir. Dizia simplesmente quando estava no 49. Trabalhar no 49 ao poder 49 dá-nos este número enorme aqui. E nada disso precisa ser armazenado na memória. Enquanto que se tivéssemos uma lista, teríamos que ter todos esses números armazenados na memória. Agora, os números são pequenos para armazenar na memória, então não é realmente grande coisa. Mas quando você está lidando com conjuntos de dados gigantes, especialmente em coisas como aprendizado de máquina ou ciência de dados. Você vai querer usar yield para garantir que seu computador não fique sem. Bem, basicamente pensando poder, não vai ficar sem RAM. Agora, se você alguma vez quis ter acesso a estes, digamos, nós dissemos, vamos apenas comentar isso. E digamos que quiséssemos obter todos esses números. Então, todos os números são iguais ao meu gerador. E então queríamos imprimir esses números por qualquer motivo. Todos os números. Vamos em frente e executar isso mais uma vez. E isso não nos dá nada. Não nos dá esses números. Em vez disso, ele retorna um objeto gerador. Agora, se quisermos acesso a esses números, o que podemos fazer é lançar qualquer coisa que este gerador vai devolver a coisa toda. Todos esses números. Podemos colocar isso em uma lista. Vamos em frente e executar este queria ser elenco como uma lista. E vemos todos esses números gigantes aqui. Agora, neste momento em que estamos lançando isso como uma lista, este gerador, o que quer que ele retorne, todos esses números é o que ele vai retornar vai ser armazenado nesta variável chamada todos os números. Então agora estamos guardando isso para mais tarde. Enquanto que com apenas um gerador regular, nosso exemplo anterior não estava salvando esses números para mais tarde. Só estamos fazendo algo com esses números, um de cada vez. Mas com uma lista. Nós dissemos, sim, ok, processe todos estes um de cada vez. E então todos esses valores salvos dessa palavra-chave yield vai para esta lista. E essa lista vai ser classificada na memória que possamos trabalhar com essa lista na estrada. Agora, por que faríamos isso, ou onde faríamos isso é se estamos trabalhando com grandes números são muito processamento. Ele pode fazer um monte de processamento de uma tarefa de cada vez. Não precisa se preocupar com todas as outras coisas antes ou depois. E então podemos colocar apenas a resposta em uma lista. Então, enquanto o computador está fazendo 37 ao poder de 37, nós não nos importamos com esse processamento. Então, basicamente, estamos dizendo que isso é um pouco mais qual é a palavra que eu estou procurando aqui? Temporário. É um pouco mais temporário. E assim ou descartável acrescenta uma palavra melhor. Vai fazer uma coisa. E então, quando terminar, ele vai jogá-lo nessa palavra-chave yield. Se ele passar para o próximo vai se livrar disso na memória. Não importa qual foi o último. Ele só se preocupa com a tarefa atual em mãos. Considerando que com uma lista ou qualquer outro tipo de dados, uma vez que armazenamos em uma variável, ele está realmente sendo armazenado nessa variável. Então, para usar um gerador e, em seguida, armazená-lo em uma variável. Não é a maneira correta de usar um decorador e não um decorador, mas um gerador. Isto é mais ou menos o que vamos usar. Então realmente é uma maneira de fazer algum tipo de processamento e depois jogá-lo fora. Então nós vamos dizer para cada grande número no meu gerador impresso, e ele vai processar um para o poder de 12, para o poder de 23, para o poder de três, todo o caminho até 50 para o poder de 50. E vai imprimir um de cada vez. Não vai guardar tudo na memória. Simplesmente vai fazer uma coisa de cada vez. Então é realmente, muito bom para código descartável em grandes conjuntos de dados. Agora, novamente, se você está entrando em desenvolvimento web, você não vai ver geradores muitas vezes para ser honesto. Mas se você está entrando em ciência de dados ou aprendizado de máquina, você vai ver isso em todos os lugares e um conceito muito, muito importante na programação Python. E, de fato, podemos fazer mais um exemplo aqui. Vamos verificar o alcance. Então podemos dizer total é igual ao intervalo de 50 e imprimir total. E vamos fazer com que isto devolva um decorador também. E, na verdade, não devolveu um decorador. Ele retornou o intervalo de função 0 a 50. Mas é um gerador nos bastidores. E o que não vemos é que ele não está passando e criando uma lista de 150. E se fizéssemos a lista de intervalo 50? Agora temos uma lista de 0 a 49 ou 50 números no total. E assim funciona da mesma forma que o nosso gerador inventado. Agora uma coisa a ter em mente é que uma vez que você iterar em um dos geradores aqui, não vai funcionar mais para ele. Então vamos em frente e descomentar isso. Vamos nos livrar deste exemplo aqui em baixo, e vamos reexecutar o script. E deve imprimir todos os números. Mas a impressão não vai funcionar porque não vai haver nada lá dentro. O gerador se esgotou. É um e feito tipo de coisa. E na verdade eu estou apenas olhando para este código e ele não vai, porque ele vai criar um novo gerador para cada um deles. Vamos em frente e jogar isso em uma variável. Então meu gerador var é igual ao meu gerador. E vamos trocar isso aqui pelo meu var gen. E podemos ver que imprime todos esses números, mas não está fazendo nada aqui. Então este gerador, esta função, nós jogamos isso em uma variável. Então dissemos: “Ei, execute isso”. Então ele diz um para o poder 12 para o poder 23 para o poder 349 para o poder de 49, todo o caminho através de todos esses números classificados em uma variável, que o gerador do que se esgotou. Então, se tentarmos acessar o gerador de novo, veremos que não imprime nada. E tudo o que fez foi imprimir a nossa lista gigante aqui. Mas não imprimiu um de cada vez, como aquela forma de pirâmide que vimos aqui em cima. Não vai imprimir nenhum deles porque eu gerador está pronto. É uma coisa única e feita. Então, se quisermos acessar o gerador novamente, temos que, de uma forma estranha, acessar o gerador novamente. E assim fazemos assim. Dissemos chamá-lo aqui em cima e depois chamá-lo novamente aqui em baixo. E desta vez vamos ver resultados diferentes. Vamos ver todos esses grandes números. E acima, vamos ver esta lista de números. E uma coisa a ter em mente com o gerador, é uma coisa única e feita. Assim que esgotar o gerador, está feito. Você tem que criar um novo ou não criar um novo. Isso é mau texto, mas você tem que instanciar ou gerar um novo gerador. Depois de criar esse novo gerador, então você pode fazer o que quiser com ele. Mas se você tentar executar esse gerador mais de uma vez, se é como, por exemplo, armazenado em uma variável vai ser esgotado primeira vez e só se preocupa em executar uma vez. Não é como uma função, uma função e você pode continuar usando uma e outra e outra vez. Um gerador é uma coisa de tipo único e feito. 14. Pipenvs: um tipo de ambiente virtual: Certo, vamos falar sobre Pip. Ambientes Pip. Estou dizendo Pip env. E em Python um-para-um ou Python 201, não me lembro. Usamos um comando python chamado Python traço m dot v. E então entramos dentro de um ambiente virtual e isso criou um ambiente virtual para nós. Há outra maneira de fazer isso e, na verdade, há várias maneiras diferentes de criar um ambiente virtual. Mas outra maneira comum é um Pip env. E eu, pessoalmente, gosto muito de Pip termina porque eles são agradáveis e simples. E então vamos fazer este aqui na nossa linha de comando. Isso faz com que seja maior. Vamos nos livrar desta barra lateral aqui. E assim eu estou na minha pasta Python 301. Primeiro de tudo, o que eu quero fazer é pip instalar Pip env. E devido a, devido a fazer, ele vai coletar Pip env. E hoje eu tenho PIP nth. Agora o que eu posso fazer é digitar Pip env. E dá-me uma lista de comandos. Verifique o gráfico limpo, instalar, bloquear, abrir scripts de execução deve afundar, desinstalar e atualizar. Isso é muito mais fácil do que escrever Python traço m v, m dot v. Em vez disso, o que podemos fazer é digitar. E eu vou limpar isso. Podemos digitar Pip env install, e isso vai criar um ambiente PIP para nós. Então vamos apenas fazer pip install. Devido a, devido ao devido faz uma coisa. E diz para ativar seus projetos virtual end run pip, shell, Pip shell. E agora estamos dentro de um ambiente PIP. Você pode ver que eu estou dentro de um porque tem colchetes aqui. Vamos em frente e digite python traço v. E nós vamos ver que eu estou usando Python 3.9, Cuckoo, cuco. Isso é legal. Vamos sair dessa apertando Controle D. Então CTR mais D cancelado com Controle C, Controle D, que sai do nosso Pip env. Agora, se eu quiser voltar, eu faço Pip N shell e eu estou dentro dele, então eu posso fazer pip install. Digamos que eu queria instalar o Django é igual a 2, algo. Doo-doo-doo-doo. Basta conduzi-lo e sólidos ficando 2.2.17. Show do Pip. Django. E eu tenho dois ponto-a-ponto dezessete. Agora sei que no meu computador não tenho essa versão. Eu tenho django 3.1 algo ou outro. E então isso agora está completamente isolado do resto do meu computador e você pode realmente ver a localização de onde isso está sendo usado. Está na minha pasta de usuários, Caleb Aeolian dot compartilhamento local EMS virtual, Python três ou um, esse é o nome da pasta. Então algum tipo de hash LIB, Python 3.9 pacotes de site. Legal, vamos sair daqui com o Controle D. E vamos dizer que queremos nos livrar desse ambiente PIP. Podíamos fazer Pip env, Dash, Dash ou M. E assim feito. Não temos mais um ambiente PIP. Então esta é uma boa maneira de criar um ambiente e excluir um ambiente. Agora, digamos que você tenha um projeto usando uma determinada versão do Python. Há duas maneiras diferentes de usar Python. Quando se trata de versionamento. Você pode usar pi n e você pode mudar sua versão Python. Ou a maneira que eu prefiro fazer é com Pip env. E eu posso fazer pip instalar traço, traço Python. E vamos fazer Python 3.7. Em nossa última versão ou última Pip env, usamos Python 3.9. E então vamos em frente e usar Python 3.7. Pip env shell. Vamos apenas limpar este Python traço V. E eu estou usando Python 3.7.2. Portanto, há duas maneiras de usar várias versões do Python. Eu pessoalmente prefiro desta maneira porque quando eu terminar com ele, eu posso simplesmente dizer Pip env, traço, traço r, m, e isso só vai removê-lo. Boom, eu não tenho um ambiente PIP por mais tempo. Agora, se nós fizemos é traço LA, grep, a palavra Pip. Vamos ver se temos dois arquivos do Pip. Agora este comando vai ser um pouco diferente. Se você está no Windows, provavelmente é apenas D-I-R dir. Você pode ser capaz de usar grep. Você sempre pode listar tudo o que está em sua pasta para que você possa fazer. Ou se você estiver no Windows ou ls traço LA, se você estiver no Mac ou Linux. E eu tenho um arquivo Pip e um arquivo Pip dot lock. E o que isso é o PIP file.txt. E o arquivo Pip especifica que tipo de pacotes estão envolvidos dentro deste arquivo Pip. Agora, eu mostrei a vocês quando eu faço pip instalar Django, que ele me deu Django. Para ponto a ponto dezessete. A maneira correta de fazer isso seria Pip. Instale seu basta criar um novo env Pip. E vamos esclarecer isso. Então podemos fazer pip install. Django é igual a 3.1 e está instalando. Agora, a desvantagem do Pip é que quando você está instalando coisas, leva alguns segundos a mais. Agora, na minha opinião, são apenas alguns segundos para um ambiente virtual agradável, vida é mais fácil assim. Pip é mais rápido que Pip o suficiente. Algumas pessoas têm um problema com isso. Algumas pessoas não. Vamos fazer Pip env, shell, clear, Pip, mostrar Django. E agora temos o django 3.1 aqui. E fizemos isso de fora do nosso ambiente virtual escrevendo pip install e, em seguida, o nome do pacote é igual à versão. E novamente, a coisa realmente adorável sobre isso é que podemos fazer pip N traço, dash r, m, e ele vai limpar nosso PIP. E para nós, toda essa pasta vai ser excluída, então não estamos desperdiçando espaço no nosso computador agora, se você é como eu e você está rodando em um Mac, você pode não ter tanto espaço e você pode querer excluir seus ambientes virtuais quando você terminar com eles, se eles forem como ambientes virtuais descartáveis. Faço isso o tempo todo. Agora eu pessoalmente amo Pippin. Eu gosto mais do que um Python holandês. E então dot ven. Ven. Se é apenas muito para digitar, é meio estranho digitar também. Só porque isso vai usar a versão Python que está no seu computador. Agora, se eu quisesse uma versão Python diferente em um ambiente virtual, eu poderia fazer pip install dash, dash python, e então a versão do Python que eu quero. E isso vai funcionar para mim. Agora, a outra maneira de fazer isso usando diferentes versões Python é usar pi n, que é uma ótima maneira de usar diferentes versões em seu, em sua máquina também. Mas eu vinculei para localizar meu projeto para que tudo esteja dentro de um ambiente virtual. Porque o que funciona no site Python 3, digamos 3.4 não vai funcionar necessariamente no 3.9. E se eu tiver um projeto usando Python 3.9, mas meu computador só tem python 3.8. Oh, agora eu posso ir em frente e usar pip install dash, dash Python 3.9 e colocar isso em funcionamento. Agora, como pequena ressalva, você pode precisar Pi instalado. Se você precisa pi n, você pode ir e ver como instalar Python em seu computador. Vai ser um pouco diferente dependendo do seu sistema operacional. Mas vou deixar isso em suas mãos porque agora você é um desenvolvedor avançado do Python. Você essencialmente o que eu estou dizendo é que você tem as habilidades para descobrir isso por conta própria. E toda a lição realmente é que há várias maneiras de fazer vários ambientes virtuais. Podemos fazer pip, poderíamos fazer Python, traço m, então podemos usar n virtual, podemos usar docker, podemos usar Vagrant. Podemos usar todos os tipos de diferentes camadas de abstração. Eu, pessoalmente, gosto do Pip n. Agora não há tarefa. Eu só queria te mostrar isso. Eu só quero mostrar a vocês que esta é uma opção disponível para vocês avançarem na nossa próxima, e nem sequer é uma lição. É o nosso projecto final. Vamos criar um aplicativo bancário usando classes. 15. Seu projeto final: Muito bem, bem-vindo de volta. Vamos em frente e criar um projeto final. Agora neste projeto, o que eu quero que você crie é um aplicativo bancário. E não precisa ser super complexo, mas precisa ter alguns extras nele. Então, em primeiro lugar, isso deve ser baseado em classes. Deve ter métodos nele para com sorteio e depósito. E depois de cada saque e depósito, quero que escreva a transação para um arquivo Python. Agora nós não cobrimos como abrir e escrever para arquivos e Python 301, que era uma coisa python 201, se eu acredito corretamente. Então o que eu quero que você faça é que eu quero que você tente criar um projeto que vai perguntar ao usuário uma e outra vez e outra vez o que eles querem fazer. Eles querem retirar ou eles querem depositar, e quanto eles querem fazer? Então eu quero que você mantenha o controle de tudo isso dentro de uma classe chamada banco depois de cada transação, certo? Essa transação para um arquivo Python. Então temos um histórico dessa transação, ou não apenas essa transação, mas todas as transações. Agora eu não vou dar mais nenhuma pista a não ser que nós vamos estar usando a verdade selvagem. Vamos usar a entrada. Vamos usar classes, métodos e propriedades. Isso deve fazer um cérebro suar. Isto é tudo coisa nova para você. Bem, classes, métodos e propriedades devem ser novos para entrada. Você deve conhecer a árvore selvagem, você deve saber, oh, o que mais você precisa? Você precisa saber a sintaxe aberta para gerenciar arquivos. Você já deveria saber disso também. Se você não fizer isso, definitivamente vá e pesquise como criar isso. Agora o que eu quero que você faça é tentar isso sozinho. Não assista ao resto deste vídeo. Vou te mostrar como faço. propósito, nunca construí um desses. Então você vai ver todos os erros que eu talvez cometa também. Mas se algo aqui é novo para você, você não sabe como fazer, você não pode se lembrar. Vou pedir que não se refira a outro vídeo. Tente o melhor que puder. E se você ficar muito, muito preso, vá para o Google, vá para Stack Overflow e procure sua resposta lá. Porque 50% da codificação está resolvendo problemas e você precisa aprender a resolver problemas por conta própria. Se os professores sempre segurarem sua mão. Honestamente, você não vai aprender. E quero que você, como minha aluna, aprenda. Não só nos assistiu porque é como estilo editorial, Netflix, você sabe, eu quero que você realmente seja capaz de criar um aplicativo Python. E então, você sabe, talvez um dia nós possamos realmente trabalhar juntos e quão legal isso seria? Então vá em frente e crie um aplicativo de cozimento a partir do zero. Lembre-se que vai ter que pedir ao usuário um levantamento e um valor ou depósito e um valor, manter o controle de tudo isso. O que eu vou fazer é desvanecer isto e desaparecer de novo e eu vou mostrar-lhe a minha solução. Certo, então primeiro de tudo, vou chamar esse projeto dot pi. E eu vou selecionar tudo isso, comentar isso e usar isso como uma diretriz para o que eu tenho que fazer. Então a primeira coisa que eu preciso é de algum tipo de aplicativo bancário. Preciso criar uma classe chamada banco. E qual será a minha quantia inicial? Bem, eu vou fazer surdo init self e a quantidade inicial vai ser 0. É o quanto vou abrir esta conta com os $0. Use um flutuador aqui, 0.0.0. saldo de Self.idade é igual ao montante inicial. Então eu preciso retirar e eu preciso depositar. Tão surdo, com sorteio auto quantidade, eu vou tomar esse equilíbrio, auto-equilíbrio idade. E vamos mover isso para cima. O saldo Self.age é igual ao saldo de auto-ponto menos o valor. Agora, e se essa quantidade for, digamos uma string por algum motivo. Podemos dizer que a quantidade é igual a quantidade flutuante. Agora, na verdade não sabemos se isso vai funcionar ou não. E então o que podemos fazer aqui é, oops, o que estou fazendo aqui? Tente converter isso como o valor, exceto um erro de valor. E essa quantidade vai ser 0. E então vamos definir esse New Balance. Nós também queremos fazer depósito. Surdo D postar quanto sempre levaria auto vai levar uma quantidade. Queremos fazer a mesma tentativa e exceto aqui tentar. O valor é igual ao valor flutuante, exceto um erro de valor. Se ele não puder converter essa quantia em um flutuador e alterar essa quantia para 0. Self.equilíbrio idade vai ser o saldo de auto-idade mais o que quer que esse montante vai ser. Então, ou estamos adicionando à nossa conta ou não adicionando nada à nossa conta. E quando retiramos, ou estamos tirando essa conta ou não tirando nada dessa conta. Vamos fazer um passo menor aqui para que possamos ver isso em uma visão. E agora vamos em frente e instanciar isso. Vamos fazer uma contagem é igual a banco. O que leva em sua quantidade inicial inicial inicial? Digamos que vou abrir esta conta com 50 dólares. 50.0050.50. Vamos fazer isso. Então eu posso fazer o depósito de pontos da conta. E digamos que eu queira depositar 10 ou 10 dólares lá. E então vamos imprimir meu valor total. Saldo de pontos da conta. E então digamos que eu queira retirar 1475, não com uma vírgula, mas com um decimal. E vamos imprimir o saldo da conta novo e ter certeza que soletramos isso certo. Obrigado. Vs Code por me mostrar um erro de digitação lá. E vamos abrir um terminal e executar isto. E então começamos com 50,50, adicionamos dezenas, temos 60,5, isso é bom. E então pegamos 14,75. Então 60.5 menos 14,75 é 45,75. Então isso parece certo, e eu não vou checar essa matemática. Tenho certeza que o computador sabe o que está fazendo. E agora precisamos adicionar o log de transações. E o que mais precisamos adicionar aqui? E precisamos pedir ao usuário a entrada. Então eu vou fazer isso. Um passo menor, e acidentalmente apertei o botão errado. Um passo menor. E vamos fazer outro método em sua transação de log surdo em si. E então algum tipo de corda. O que estamos transacionando? O que estamos fazendo aqui? E vamos chamar essa string de transação. Agora precisamos abrir um arquivo. Então podemos dizer largura, que está usando um gerenciador de contexto aqui. E podemos dizer com transações abertas 2.txt, vamos acrescentar a ele o tempo todo ou criar um novo arquivo. Se ele não existe como arquivo, então podemos dizer ponto de arquivo, certo? O que queremos escrever? Queremos escrever para a cadeia de transação, e talvez sempre acrescentemos uma nova linha no final. Então vamos usar uma instrução IF aqui, uma declaração F e F String, e lançar uma nova linha aqui. E isso vem da ferramenta Python 1, onde aprendemos a lidar com arquivos. Então, agora, após cada retirada, podemos simplesmente dizer se há uma quantidade. Lembre-se se 0 é ou se a quantidade é 0, isso vai ser falso, então isso não vai ser executado. Então podemos dizer se quantidade, em seguida, fazer uma coisa. Self.view, log tendências ação e isso leva uma quantidade, não são uma quantidade, mas uma string. Leva a string de transação. Então vamos chamar isso de retirada. Quantos dólares o valor. Vamos fazer o mesmo com o depósito aqui. E o que eu posso realmente fazer é Doo-doo-doo-doo copiar isso. E só temos que nos certificar de que trocamos isso. Tenha sempre cuidado ao copiar e colar. Então podemos dizer que o saldo é igual ao saldo mais qualquer que seja o valor. Sempre que depositamos, registramos essa transação, nós não retiramos. Visitamos o depositante, depositamos o valor. E vamos em frente e abrir nossos arquivos aqui ao lado. E não vemos transações 2.txt. Era assim que lhe chamávamos? Transações ponto TXT? Ainda não vemos isso lá dentro. Vá em frente e salve isso e execute isso e veja se há algum erro de digitação ou qualquer coisa. E tudo bem. Cuco, cuco. E ele dirigiu montante depositado. Eu fiz algo muito errado lá. O que fazemos aqui? Primeiro de tudo, é uma corda F. Isto não é JavaScript. Isso é uma corda F. Isto não é JavaScript. Vamos em frente e executar isso de novo. Vemos transações. Vamos olhar para isso depositado em US $10, retirado 1475. Vamos também adicionar o saldo no ano com um novo saldo de auto-equilíbrio idade. E se eu fizer isso apenas um pouquinho menor aqui podemos ver que um, eu tenho um erro de digitação e ser que eu estou usando uma string de aplicativo. E, na verdade, podemos ficar mais chiques com isso. Poderíamos dizer que algo aconteceu e em vez de um New Balance, poderíamos fazer tabulação, tabulação, tabulação. É o que quer que o auto-ponto equilibre. Vamos em frente e limpar para transações ponto TXT. E vamos fazer isso mais uma vez. Verificar transações no depósito TFC $10 New Balance, 60.5, retirou 1475 New Saldos, 45, 75. Ok, isso está parecendo muito bom. Agora precisamos criar um, um loop de algum tipo para pedir ao usuário entrada uma e outra e outra vez. Vamos fechar isso. E temos toda a nossa lógica a funcionar. Então vamos em frente e embrulhe isso em algo chamado loop while. Embora seja verdade. Faça uma coisa. O que queremos que ele faça? Queremos pedir uma ação, vai ser entrada. Que tipo de ação você quer tomar? Então podemos dizer, se a ação está em uma lista de com Drell ou um depósito ou eu não sei por que escrevi isso, então. Faça uma coisa. Então, podemos dizer se a ação é igual a retirada, montante vai ser que tipo de montante devido queremos entrada. Quanto você quer tirar? E então podemos fazer a conta ponto retirar o montante. E eu não estou me preocupando com a digitação aqui porque estamos fazendo isso aqui. Não, lá não, aqui dentro. E aqui. Então podemos dizer outra coisa porque a ação vai ser retirada ou depósito. Se isso vai ser um depósito, quanto você quer dizer não takeout, mas colocar em e conta ponto retirada vai ser contabilizado ponto depósito d, z o valor. E aqui em baixo podemos dizer “imprimir”. Seu saldo é saldo da conta. Agora, precisamos instanciar isso antes de entrar no loop while para que não criemos uma nova conta toda vez que iteramos o loop while. E vamos nos livrar disso e daquilo, e aquilo, e aquilo. E agora temos um objeto de conta e vamos retirar ou depositar e, em seguida, imprimir o saldo. Vamos ver como isso acaba. Que tipo de ação você quer tomar? Digamos que eu queira depositar. Quanto eu quero colocar? Digamos que eu queira colocar 13 dólares. Meu saldo é agora 6350. Isso é correto. Que tipo de ação eu quero tomar? E se eu quiser retirar? Quanto você quer tirar? Digamos 13, 0.5c. Então isso nos dá 50. E vamos parar com o Controle C. Oh não, temos um erro de interrupção do teclado. E isso vem desta linha de ação. Vamos tentar isto. Tente. Excepto. E como se chamava isso? Isso foi chamado de erro de interrupção do teclado. Mas não, só se chamava teclado, teclado de interrupção. E vamos copiar isso. Lá vamos nós. E nós vamos simplesmente sair deste loop. Vamos em frente e experimentar isso. Que tipo de ação eu quero tomar? Vamos cancelar. - Ele. Simplesmente aconselhado para nós para que pudéssemos dizer impressão saindo do caixa eletrônico. E vamos colocar isso em uma nova linha. E coloque isso em uma nova linha. Devido a, devido ao novo, vamos parar. Diz “Deixando o caixa eletrônico” e uma graciosamente esquerda usando uma exceção de interrupção do teclado. Legal, isso está se unindo muito bem. Agora, uma última coisa que precisamos considerar é e se a ação não for retirada ou depósito? Vamos fazer isto. Que tipo de ação eu quero tomar? Digamos que quero roubar o banco? Não vai fazer nada. Esta é uma experiência de usuário ruim. Ele só fica perguntando, o que eu acho que não é a pior experiência de usuário, mas não é uma boa experiência de usuário. Então podemos fechar isto ou desmoronar. E podemos dizer outra coisa. Se a ação não é retirada ou depósito, o que queremos fazer? Imprima. Isso não é uma ação válida. Tente de novo. Agora vamos fazer isso. Digamos que queremos roubar e não uma ação válida. Tente de novo, coelho. Ok, e se nós quisermos com o empate? É uma palavra difícil de digitar. Com. Raul sem espaço no final. Quanto eu quero tirar? Digamos que eu quero tirar $900. Meu saldo atualmente como menos $849.50. Então agora eu estou entrando em descoberto e se você quiser, você poderia estender isso a descoberto e empréstimos e saber todo tipo de coisas. Mas isso é essencialmente todo o projeto em poucas palavras. E quando cancelo, cancela graciosamente. Ele não apenas erro fora. Diz que estou a sair do multibanco. Então vamos recapitular o que isto parece. Temos uma turma chamada banco. Quando você abre uma conta, quanto estamos colocando lá por padrão? $0, eu coloquei $50,50 centavos. Para começar. Toda vez que há uma transação, vamos abrir o arquivo TXT ponto transações. Vamos dar uma olhada nisso. E está me mostrando tudo aqui. Isso é ótimo. Isso é fazer exatamente o que eu quero que ele faça. Para cada transação, seja um levantamento ou depósito, vamos pegar esse arquivo, vamos escrever para ele e seja qual for a seqüência de transação, então retirou ou depositar o valor. Tab, tab, tab equilibrado com o saldo lá dentro. Legal, simples registrador de transações. Então temos um método de retirada. Vamos tentar lançar isto como um carro alegórico. Se não podemos lançar isso como um flutuador, ele vai dizer que a quantidade é 0. E se a quantidade for maior que 0, será basicamente, contanto que não seja 0, podemos tomar algum tipo de ação. Vamos mudar automaticamente esse saldo do que quer que fosse atualmente. Então eu abri com 50,50 e ele vai para menos a quantidade que vem aqui. E então nós vamos registrar essa quantia e essa retirada. Por último, temos depósito e a mesma coisa. Vamos tentar lançar esta quantidade como um flutuador para que possamos fazer matemática numérica sobre ele. Se não pudermos, vai dizer que a quantidade é 0. Se esse montante é se esse número é de fato um número adequado, se esse montante é um número adequado, podemos então mudar esse saldo para ser equilibrado é igual ao saldo mais qualquer quantia. E então nós dissemos em nosso registrador de transações, depositou o valor. Finalmente, criamos uma nova conta e depois dissemos caminhar até o caixa eletrônico. Essencialmente isso é o que isso está dizendo aqui. Enquanto algo é verdade, apenas continue perguntando, continue perguntando e pedindo e pedindo ação. Que tipo de ação você quer tomar? Se dissemos Controle, se cancelarmos, recebemos um erro de interrupção do teclado e simplesmente vamos sair, vamos sair desse loop. Caso contrário, se a ação estiver em retirada ou depósito, tome medidas aqui. E se essa ação é retirada, podemos dizer quanto você quer tirar e, em seguida, retirar esse montante. Caso contrário, se não for retirada, sabemos que será uma dessas declarações, retirada ou depósito. Sabemos que isto é uma retirada. Então, pela lógica de redução, isso tem que ser depósito. Então dizemos que a quantidade vai ser de entrada. Quanto você quer colocar por contagens ponto depósito para a quantidade que vai trabalhar todos os seus internos bancários. E depois podemos imprimir o saldo da nossa conta de saldo. Caso contrário, se alguém está tentando roubar o banco ou fazer outra coisa com o banco que eles realmente não deveriam estar fazendo. Vamos imprimir que não é uma ação válida. Tente de novo. Ele vai então executar esse loop mais uma vez e vai uma e outra vez até você sair do caixa eletrônico. E isso é realmente tudo o que há para este projeto em particular. E estamos fazendo uso de muitas coisas diferentes que aprendemos no Python 301. Não estamos necessariamente usando tudo, não estamos usando um gerador, não estamos usando um decorador. Embora se você quisesse, você poderia descobrir um jeito de adicionar isso lá. E se você quisesse, você provavelmente poderia transformar transação registrada em algum tipo de decorador para decorar saques e depositar com eles para que não tenhamos que escrever explicitamente aqui. Seria muito legal se você pudesse fazer isso. E sobre o que mais falamos? Pip termina? Nós provavelmente deveríamos ter feito isso em um ambiente PIP, mas você sabe, nós não estamos instalando nenhum pacote, então nós não precisamos de um ambiente PIP para isso e nós apenas precisávamos de Python comum em nossos computadores. E nós não usamos um gerador porque nós realmente não precisávamos usar um gerador. Generator seria muito bom se nós, estamos fazendo loop através de como um milhão de clientes diferentes em nosso banco e precisávamos descobrir qual cliente definiu. Então isso é tudo o que há para este aplicativo bancário em particular. Se você não deu uma chance e você apenas assista através deste vídeo. Por favor, vá em frente e experimente isso. Agora, isso é muito, muito importante porque é uma ótima prática usando uma aula. Não se esqueça se você tiver dúvidas, você sempre pode se juntar ao aprendizado de código Grupo no Facebook. Estamos felizes em responder a qualquer pergunta sobre Python que você tem lá. 16. Resumo de Python 301: Bem-vindo ao resumo do Python 301. Eu tenho sido seu professor. Você é professor muito orgulhoso, a propósito, meu nome é Caleb Eataly e você pode me seguir em Kilo Tolkien no Twitter. Ou se você quiser dicas e truques de codificação, você sempre pode seguir ponto de codificação para ponto todos no Instagram. Se você precisar de alguma ajuda, há um grupo de suporte gratuito com dezenas de milhares de membros nele chamado aprender a codificar no Facebook. Tudo o que você precisa é de uma conta no Facebook. É absolutamente grátis. Passamos horas em sua preparação diária para garantir que haja postagens de alto valor lá e que não haja spam. Então é um bom grupo para se juntar. Se você quiser. Meu método de ensino, não se esqueça, tenho vários outros cursos. Apenas me procure. Meu nome é Caleb, alto, magro, e você pode encontrá-los em todos os tipos de plataformas lá fora, incluindo o YouTube. Obrigado por tomar Python 301. E novamente, eu tenho sido seu anfitrião e seu instrutor, Caleb Colleen, e espero estar trabalhando com você no futuro agora que você é um programador avançado em Python, espero que se divirta e te vejo por aí. Tchau.