Como criar uma classe simples em Python

Em uma linguagem orientada a objetos, uma classe é um trecho extensível de código que representa um modelo para criar e usar os objetos dessa classe. Um objeto de uma classe simplesmente se refere a uma instância da classe definida.

Python Class Basics

Na linguagem de programação Python, cada parte dos dados é representada como uma instância de alguma classe. Se você não estiver familiarizado com a linguagem, consulte nosso guia para iniciantes em Python antes de prosseguir.

Uma classe fornece um conjunto de comportamentos na forma de funções de membro (também conhecidas como métodos), que tem implementações que são comuns a todas as instâncias dessa classe, e também determina a maneira como as informações de estado de sua instância são representadas no forma de atributos.

Leia mais: Métodos de classe em Python: as diferenças importantes

O código a seguir representa um exemplo de uma classe definida em Python. A classe definida no código fornece uma implementação de uma classe RaceCar.

Cada instância da classe fornece um modelo simples para diferentes marcas de carros e contém as seguintes informações de estado: nome do carro, nome do motorista, número da placa do carro, velocidade atual, taxa de excesso de velocidade e cor.

Esta classe de carro modela um sensor especial dentro de cada carro que registra uma multa de $ 50 contra o motorista do carro se ele ou ela exceder o limite de velocidade legal de 140 milhas por hora.

Exemplo de uma classe (classe de carro)

 
class Car:
#Constructor
#the init method is responsible for initialising the values of the instance #variables in the class.
def __init__(self, car_name, driver_name, license_plate_number,
current_speed, speeding_charge, colour):
self.car_name = car_name
self._driver_name = driver_name
self._license_plate_number = license_plate_number
self._current_speed = current_speed
self._speeding_charge = speeding_charge
self._colour = colour
#Accessor methods
#The get_car_name method returns the name of the car
def get_car_name(self):
return self._car_name
#The get_driver_name method returns the name of the driver
def get_driver_name(self):
return self._driver_name
#The get_license_plate method returns the license plate of the car
def get_license_plate(self):
return self._license_plate
#The get_current_speed method returns the current speed at which the car is #moving
def get_current_speed(self):
return self._current_speed
#The get_speeding_charge method returns the total amount of money that the
#driver has to pay for over-speeding
def get_speeding_charge(self):
return self._speeding_charge
#The get_colour method returns the colour of our sweet ride!
def get_colour(self):
return self._colour
#Mutator methods
#The set_driver value changes the driver of our car.
def set_driver(self, new_driver):
self._driver_name = new_driver
#The speeding_ticket method ensures that the driver is charged 50 bucks when#he or she caught speeding above 140 miles per hour :(
def speeding_ticket(self, current_speed):
if current_speed <= 140:
return False
else:
self._speeding_charge += 50
return True
#The make_payment method ensures that the driver is able to pay for all the #amount that he or she owes for speeding ticket charges.
def make_payment(self, amount_paid):
self._speeding_charge -= amount_paid

Uma explicação do exemplo de classe Python

O parâmetro "Self"

Em primeiro lugar, observe que há uma diferença entre a assinatura do método declarada na classe e a assinatura do método que é usada pelo programador para chamar a função. Por exemplo, o método get_colour conforme definido na classe leva um parâmetro que é o parâmetro 'self'.

No entanto, quando o programador está chamando esse método em uma instância da classe, ele não fornece nenhum parâmetro. Este mesmo fenômeno pode ser observado no método speeding_ticket que é definido para tomar dois parâmetros na classe (ie self e current_speed), mas o programador é capaz de executar este método fornecendo o valor apenas para o parâmetro 'current_speed'.

Isso ocorre porque o objetivo do parâmetro 'self' fornecido é vincular o método à instância do objeto na qual ele foi chamado e não é um valor a ser fornecido pelo programador.

O construtor

Um construtor de uma classe refere-se ao método da classe que um usuário pode chamar para criar uma instância de objeto dessa classe. Na classe Car, o usuário pode criar uma instância de objeto usando a seguinte sintaxe:

 #creating our very own Bugatti :)
Car(“Bugatti”, “David Sasu”, 90828, 0, 0, "Cherry Red")

A execução deste código resulta em uma chamada ao método __init__ na classe Car. A responsabilidade desse método é gerar um objeto de carro de crédito recém-criado com os valores de instância fornecidos. Cada objeto da classe Car é constituído por seis variáveis ​​de instância que são:

  • _car_name
  • _nome do motorista
  • _placa de carro
  • _velocidade atual
  • _speeding_charge
  • _cor

Métodos de Acesso

Esses são métodos escritos para acessar as informações de estado de uma instância de objeto. Na classe Car, os métodos acessadores que foram escritos são:

  • get_car_name
  • get_driver_name
  • get_license_plate
  • get_current_speed
  • get_speeding_charge
  • get_colour

Métodos mutadores:

Esses são métodos escritos para alterar as informações de estado de uma instância de objeto. Na classe Car, os métodos modificadores que foram escritos são:

  • set_driver
  • speeding_ticket
  • faça o pagamento

O Conceito de Encapsulamento

'Encapsulamento' é um termo usado para descrever um princípio de design orientado a objetos, onde os componentes de um programa não devem revelar os detalhes internos de suas respectivas implementações. Para aumentar sua compreensão do conceito de encapsulamento, consulte nosso artigo sobre encapsulamento.

Verificação de erros

Nossa implementação da classe Car não é robusta, pois é provável que ela trave ou funcione mal, dependendo da entrada que ela recebe do programador.

Em primeiro lugar, observe que não verificamos os tipos de parâmetros dos métodos speeding_ticket e make_payment, nem verificamos os tipos de qualquer um dos parâmetros do construtor. Isso pode levar ao travamento do programa se o usuário fornecer um argumento inesperado. Por exemplo, se o usuário fizer uma chamada como speeding_ticket (“chips ahoy”), o programa travaria porque o tipo que o método esperava era um inteiro e não uma string.

Agora você entende os fundamentos da classe Python

Neste artigo, você foi apresentado ao conceito de uma classe Python e a um objeto de classe Python. Você também foi apresentado às idéias sobre as quais uma classe Python é construída, como: encapsulamento, o identificador 'self', métodos de acesso e métodos modificadores.

Com essas informações, você deve ser capaz de criar uma classe Python simples por conta própria e testá-la