Olá. Eu quero contar para vocês a diferença entre variáveis de classe e variáveis de objeto, ou variáveis de instância. É conceito muito simples, mas é importante orientação objetos. Primeiro vamos ver como que a gente implementaria isso Java e depois Python. Então por exemplo, Java se e eu tenho uma classe que chama bola, eu posso querer ter uma variável de objeto, de instância, chamado diâmetro, para guardar o diâmetro dessa bola. E diferentes bolas vão ter diferentes diâmetros. Por outro lado, eu posso querer ter também uma variável, por exemplo, e nesse caso eu vou fazer uma variável da classe bola para dizer qual é a forma da classe bola e toda a bola tem a mesma forma. Então vai ser uma variável da classe querendo dizer que toda as instâncias daquela classe compartilham essa variável. Para dizer isso Java e também C++ a gente usa essa palavra reservada, reservada static e depois, por exemplo, a variável aqui. Uma variável string para ter a forma da bola. Se eu quiser eu posso inicializar com determinado valor, pode ser que a bola é redonda. Então note que são dois tipos de variáveis diferentes, diâmetros uma variável da instância, ou seja, cada instância vai ter valor diferente, uma variável diferente para aquele diâmetro. Já como tem esse static na variável forma ela vira uma variável da classe. Então todas as instâncias daquela classe vão compartilhar esta mesma forma, que é a forma redonda. Como seria isso aqui algo equivalente na linguagem Python? Então vamos supor que a gente tem uma classe bola de novo ali Python, e nessa classe bola eu posso querer ter uma variável de classe, por exemplo, para contar quantas bolas eu criei. Daà o jeito que eu faço isso, eu declaro essa variável aqui na classe variável conta_bolas, que inicialmente eu vou dizer que eu tenho zero bolas. Daà eu preciso declarar construtor o jeito de eu declarar construtor Python é assim: eu uso método cujo nome do método é underscore, underscore, sublinhado, sublinhado, init. Depois sublinhado sublinhado. Daà eu passo como parâmetro self, uma referência para a própria instância e depois os argumentos que eu quero aà nesse meu construtor. Então por exemplo, diâmetro vai poder criar bolas de diferentes diâmetros. E daà eu posso, por exemplo, definir aqui que o diâmetro dessa minha bola vai ser isso que é passado como parâmetro, o diâmetro, e eu posso incrementar aà o número bolas criadas. Para isso eu preciso colocar aqui bola, ponto, conta bolas. Então essa é a forma de eu acessar uma variável de classe. Porque quando a bola pertence a classe bola, então para acessar ela eu preciso fazer bola, o nome da classe, ponto, o nome dela, conta bolas e mais igual a que significa eu quero somar no valor desse conta bolas. Então essa é a forma de eu declarar uma variável de classe, que é o conta bolas e também uma variável de instância que nesse caso é o diâmetro. Vamos ver graficamente como que essas coisas funcionam. Então vamos supor, como eu disse, que a gente tem essa classe bola e eu vou ter uma variável forma, essa forma aqui vai ser uma variável de classe pertencente a classe bola, e uma variável diâmetro. Vocês me desculpem minha letra aqui que no iPad fica muito feia. Já é feia, no iPad fica pior. E daà eu posso ter várias instâncias dessa minha classe bola B1, B2, B3. Então o que acontece. Se aqui no B1 eu tenho a variável forma, eu atribuo a essa variável forma outro valor, por exemplo, eu falo que ela é oval para virar uma bola de futebol americano, daà a forma do B2 e do B3 também mudam para oval. Por quê? Porque é uma única variável de classe que é compartilhada por essas três instâncias. Por outro lado, se eu venho aqui no diâmetro da B3 e falo que o diâmetro é 5 e se eu venho na B2 e falo que o diâmetro da B2 é 2, vão ser variáveis diferentes que vão conter valores diferentes. Como que isso aqui funciona? Funciona da seguinte forma. Quando o sistema de execução aqui da minha linguagem de programação cria a classe bola quando eu defino a classe bola, ela já aloca espaço na memória para guardar essa variável forma, porque essa forma vai ser compartilhada por todas as instâncias. Então quando eu defino a classe já é alocado espaço na memória para todas as variáveis de classe, mas não aloca para diâmetro porque é uma variável de distância. Quando que o espaço na memória é alocada para variável diâmetro quando eu instancio cada uma dos objetos daquela classe. Então quando eu instancio B1, daà sim ele vai lá e aloca o espaço para variar o diâmetro do B1. Quando eu instancio o B2, aloco o espaço para o diâmetro do B2 e assim por diante. Então são tipos diferentes de variáveis que são alocados momentos diferentes e tem usos diferentes. Então espero que vocês tenham entendido a diferença entre a variável de instância e a variável de classe.