English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Neste artigo, você aprenderá as funcionalidades principais do Python, os objetos e classes do Python. Você aprenderá o que é uma classe, como criar uma e usá-la em um programa.
Python é um linguagem de programação orientada a objetos. A programação orientada a processo se concentra principalmente em funções, enquanto a programação orientada a objetos se concentra em objetos.
O objeto é apenas uma coleção de dados (variáveis) e métodos (funções) que operam sobre esses dados. E a classe é o esboço do objeto.
Podemos ver a classe como um rascunho (protótipo) da casa. Ele contém todos os detalhes sobre o chão, a porta, as janelas, etc. Baseado nessas descrições, construímos as casas. A casa é o objeto.
Como podemos fazer muitas casas com descrições, podemos criar muitos objetos com base na classe. Os objetos também são chamados de exemplos da classe, e o processo de criação desses objetos é chamado deInstanciar.
como chave de definição de função.defComeça da mesma forma, no Python, usamos a palavra-chaveclassDefine umClasse.
A primeira string é chamada de docstring e tem uma breve descrição sobre a classe. Embora não seja obrigatório, é recomendado fazer isso.
Esta é uma definição de classe simples.
class MyNewClass: '''Esta é uma string de documentação. Eu criei uma nova classe''' pass
Uma classe cria um novo espaço localEspaço de nomese define todas suas propriedades. As propriedades podem ser dados ou funções.
Além disso, há algumas propriedades especiais, que começam com sublinhado duplo (__). Por exemplo, __doc__ nos dá a string de documentação da classe.
Depois de definir uma classe, será criado um novo objeto de classe com o mesmo nome. Este objeto de classe nos permite acessar diferentes propriedades e instanciar novos objetos da classe.
class MyClass: "Isso é minha segunda classe" a = 10 def func(self): print('Olá') # Saída: 10 print(MyClass.a) # Saída: <function MyClass.func at 0x0000000003079BF8> print(MyClass.func) # Saída: 'Isso é minha segunda classe' print(MyClass.__doc__)
Quando o programa é executado, a saída será:
10 <function 0x7feaa932eae8="" at="" myclass.func="" Isso é minha segunda classe
Vimos que os objetos de classe podem ser usados para acessar diferentes propriedades.
Também pode ser usada para criar novos exemplos de objetos da classe (instanciar). O processo de criação de objetos é semelhante aFunçãoChamada.
>>> ob = MyClass()
Isso criará um novo exemplo de objeto ob. Podemos usar o prefixo do nome do objeto para acessar os atributos do objeto.
Os atributos podem ser dados ou métodos. O método do objeto é a função correspondente da classe. Qualquer objeto de função como atributo da classe define um método para o objeto da classe.
Isso significa que, devido a MyClass.func ser um objeto de função (atributo da classe), ob.func se tornará um objeto de método.
class MyClass: "Isso é minha segunda classe" a = 10 def func(self): print('Olá') # Criar uma nova MyClass ob = MyClass() # Saída: <function MyClass.func at 0x000000000335B0D0> print(MyClass.func) # Saída: <bound method MyClass.func of <__main__.MyClass object at 0x000000000332DEF0>> print(ob.func) # Chamando a função func() # Saída: Hello ob.func()
Você pode ter notado o parâmetro self na definição de função interna da classe, mas, apenas chamamos este método de ob.func(), semParâmetros. Isso ainda é válido.
Isso acontece porque, sempre que um objeto chama seu método, o próprio objeto é passado como primeiro parâmetro. Portanto, ob.func() automaticamente se torna MyClass.func(ob).
Geralmente, chamar um método com uma lista de n parâmetros é equivalente a chamar uma função com uma lista de parâmetros, que é criada inserindo o objeto do método no primeiro parâmetro.
Por essas razões, o primeiro parâmetro da função dentro da classe deve ser o próprio objeto. Isso geralmente é chamado deself. Você pode usar outros nomes, mas recomendamos fortemente que você siga as convenções.
Agora, você deve estar familiarizado com objetos de classe, objetos de exemplo, objetos de função, objetos de método e suas diferenças.
As funções de classe que começam com duplo underscore (__) são chamadas de funções especiais, pois têm significado especial.
__init__() é especialmente útil. Sempre que um novo objeto da classe é instanciado, essa função especial é chamada.
Este tipo de função também é chamado de construtor em programação orientada a objetos (OOP). Usamos geralmente para inicializar todas as variáveis.
class ComplexNumber: def __init__(self, r = 0, i = 0): self.real = r self.imag = i def getData(self): print("{0}+{1})".format(self.real, self.imag)) # Cria outro objeto ComplexNumber c1 = ComplexNumber(2,3) # Chama a função getData() # Saída: 2+3j c1.getData() # Cria outro objeto ComplexNumber # E cria uma nova propriedade 'attr' c2 = ComplexNumber(5) c2.attr = 10 # Saída: (5, 0, 10) print((c2.real, c2.imag, c2.attr)) # Mas c1O objeto não possui atributo "attr" # AttributeError: objeto 'ComplexNumber' não possui atributo 'attr' c1.attr
No exemplo acima, definimos uma nova classe para representar números complexos. Ela possui duas funções, __init__() para inicializar variáveis (padrão é zero) e getData() para exibir o número corretamente.
Uma coisa interessante a notar nos passos acima é que os atributos dos objetos podem ser criados dinamicamente. Criamos um novo objeto c2Foi criado um novo atributo attr e lido, mas isso não foi atribuído ao objeto c1Criar essa propriedade.
Pode usar a declaração del para excluir qualquer atributo do objeto a qualquer momento. Experimente a seguinte operação no Python Shell para ver a saída.
>>> c1 = ComplexNumber(2,3) >>> del c1.imag >>> c1.getData() Traceback (última chamada mais recente): ... AttributeError: o objeto 'ComplexNumber' não possui atributo 'imag' >>> del ComplexNumber.getData >>> c1.getData() Traceback (última chamada mais recente): ... AttributeError: o objeto 'ComplexNumber' não possui atributo 'getData'
Nós até podemos usar a declaração del para deletar o objeto em si.
>>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (última chamada mais recente): ... NameError: 'c' não está definido1'is not defined'
Na verdade, é mais complexo do que isso. Após a conclusão, um novo exemplo de objeto c será criado na memória1 = ComplexNumber(1,3) nomec1associado a ela.
comando del c1também removerá essa ligação e excluirá o nome do espaço de nomes correspondentec1No entanto, o objeto continua existindo na memória, e se não houver outros nomes ligados, o objeto será automaticamente destruído mais tarde.
Neste caso, a destruição automática de objetos não referenciados no Python também é conhecida como coleta de lixo.