Classes e objetos Python (com exemplos)

Neste tutorial, você aprenderá sobre a funcionalidade principal de objetos e classes Python. Você aprenderá o que é uma classe, como criá-la e usá-la em seu programa.

Vídeo: Classes e objetos Python

Objetos e classes Python

Python é uma linguagem de programação orientada a objetos. Ao contrário da programação orientada a procedimentos, onde a ênfase principal está nas funções, a programação orientada a objetos enfatiza os objetos.

Um objeto é simplesmente uma coleção de dados (variáveis) e métodos (funções) que agem sobre esses dados. Da mesma forma, uma classe é um projeto para esse objeto.

Podemos pensar em classe como um esboço (protótipo) de uma casa. Ele contém todos os detalhes sobre os pisos, portas, janelas, etc. Com base nessas descrições construímos a casa. A casa é o objeto.

Como muitas casas podem ser feitas a partir da planta de uma casa, podemos criar muitos objetos de uma classe. Um objeto também é chamado de instância de uma classe e o processo de criação desse objeto é chamado de instanciação .

Definindo uma classe em Python

Como as definições de função começam com a palavra-chave def em Python, as definições de classe começam com uma palavra-chave class.

A primeira string dentro da classe é chamada docstring e tem uma breve descrição sobre a classe. Embora não seja obrigatório, isso é altamente recomendado.

Aqui está uma definição de classe simples.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Uma classe cria um novo namespace local onde todos os seus atributos são definidos. Os atributos podem ser dados ou funções.

Também há atributos especiais nele que começam com sublinhados duplos __. Por exemplo, __doc__nos dá a docstring dessa classe.

Assim que definimos uma classe, um novo objeto de classe é criado com o mesmo nome. Este objeto de classe nos permite acessar os diferentes atributos, bem como instanciar novos objetos dessa classe.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Resultado

 10 Esta é uma classe pessoal

Criação de um objeto em Python

Vimos que o objeto de classe pode ser usado para acessar diferentes atributos.

Ele também pode ser usado para criar novas instâncias de objeto (instanciação) dessa classe. O procedimento para criar um objeto é semelhante a uma chamada de função.

 >>> harry = Person()

Isso criará uma nova instância de objeto chamada harry. Podemos acessar os atributos dos objetos usando o prefixo do nome do objeto.

Os atributos podem ser dados ou método. Os métodos de um objeto são funções correspondentes dessa classe.

Isso quer dizer que, por Person.greetser um objeto de função (atributo de classe), Person.greetserá um objeto de método.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Resultado

  Olá 

Você deve ter notado o selfparâmetro na definição da função dentro da classe, mas chamamos o método simplesmente harry.greet()sem nenhum argumento. Ainda funcionou.

Isso ocorre porque, sempre que um objeto chama seu método, o próprio objeto é passado como o primeiro argumento. Então, se harry.greet()traduz em Person.greet(harry).

Em geral, chamar um método com uma lista de n argumentos é equivalente a chamar a função correspondente com uma lista de argumentos que é criada inserindo o objeto do método antes do primeiro argumento.

Por essas razões, o primeiro argumento da função em classe deve ser o próprio objeto. Isso é convencionalmente chamado de self. Ele pode ter outro nome, mas é altamente recomendável seguir a convenção.

Agora você deve estar familiarizado com objeto de classe, objeto de instância, objeto de função, objeto de método e suas diferenças.

Construtores em Python

As funções de classe que começam com sublinhado duplo __são chamadas de funções especiais, pois têm um significado especial.

De um interesse particular é a __init__()função. Esta função especial é chamada sempre que um novo objeto dessa classe é instanciado.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Qualquer atributo de um objeto pode ser excluído a qualquer momento, usando a delinstrução. Tente o seguinte no shell Python para ver a saída.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Podemos até mesmo excluir o próprio objeto, usando a instrução del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Na verdade, é mais complicado do que isso. Quando fazemos isso c1 = ComplexNumber(1,3), um novo objeto de instância é criado na memória e o nome c1 se associa a ele.

No comando del c1, essa ligação é removida e o nome c1 é excluído do namespace correspondente. O objeto, entretanto, continua a existir na memória e se nenhum outro nome estiver associado a ele, ele será destruído automaticamente mais tarde.

Essa destruição automática de objetos não referenciados em Python também é chamada de coleta de lixo.

Excluir objetos em Python remove a vinculação de nome

Artigos interessantes...