Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> python

Objetos e classes do Python

Objetos e classes Python


Neste tutorial, você aprenderá sobre a funcionalidade principal dos objetos e classes do 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 atuam sobre esses dados. Da mesma forma, uma classe é um modelo para esse objeto.

Podemos pensar em uma aula 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


Assim 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 da 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.

Há também atributos especiais 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: <function Person.greet>
print(Person.greet)

# Output: "This is a person class"
print(Person.__doc__)

Saída
10
<function Person.greet at 0x7fc78c6e8160>
This is a person class

Criando um objeto em Python


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

Também pode ser usado para criar novas instâncias de objetos (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 significa dizer, uma vez que Person.greet é um objeto de função (atributo de classe), Person.greet será 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: <function Person.greet>
print(Person.greet)

# Output: <bound method Person.greet of <__main__.Person object>>
print(harry.greet)

# Calling object's greet() method
# Output: Hello
harry.greet()

Saída
<function Person.greet at 0x7fd288e4e160>
<bound method Person.greet of <__main__.Person object at 0x7fd288e9fa30>>
Hello



Você deve ter notado o self parâmetro na definição da função dentro da classe, mas chamamos o método simplesmente como 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, harry.greet() traduz para Person.greet(harry) .

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

Por esses motivos, o primeiro argumento da função na classe deve ser o próprio objeto. Isso é convencionalmente chamado de self . Pode ser nomeado de outra forma, 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


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 é o __init__() função. Essa função especial é chamada sempre que um novo objeto dessa classe é instanciado.

Esse tipo de função também é chamado de construtores em Programação Orientada a Objetos (OOP). Normalmente o usamos para inicializar todas as variáveis.
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)

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

No exemplo acima, definimos uma nova classe para representar números complexos. Tem duas funções, __init__() para inicializar as variáveis ​​(o padrão é zero) e get_data() para exibir o número corretamente.

Uma coisa interessante a ser observada na etapa acima é que os atributos de um objeto podem ser criados em tempo real. Criamos um novo atributo attr para objeto num2 e leia também. Mas isso não cria esse atributo para o objeto num1 .

Excluindo atributos e objetos


Qualquer atributo de um objeto pode ser excluído a qualquer momento, usando o del declaração. Tente o seguinte no shell do 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é 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 c1 = ComplexNumber(1,3) , um novo objeto de instância é criado na memória e o nome c1 liga com ele.

No comando del c1 , esta ligação é removida e o nome c1 é excluído do namespace correspondente. O objeto, no entanto, continua a existir na memória e, se nenhum outro nome estiver vinculado a ele, ele será automaticamente destruído posteriormente.

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

python

  1. Classe e objeto C#
  2. Classe abstrata e método C#
  3. C# Classe Parcial e Método Parcial
  4. Classe e método selados em C#
  5. Classes e objetos C++
  6. Função de amigo C++ e classes de amigo
  7. Palavras-chave e identificadores do Python
  8. Declaração Python, Recuo e Comentários
  9. Gerenciamento de diretórios e arquivos Python
  10. Exceções personalizadas do Python