Resumo : neste tutorial, você aprenderá programação orientada a objetos em Python, incluindo conceitos essenciais como objetos, classes, atributos, métodos, heranças, métodos de substituição, etc.
Introdução à programação orientada a objetos Python
Tudo em Python é um objeto. Um objeto tem um estado e comportamentos. Para criar um objeto, você primeiro define uma classe. E então, a partir da classe, você pode criar um ou mais objetos. Os objetos são instâncias de uma classe.
Definir uma classe
Para definir uma classe , você usa a class
palavra-chave seguida do nome da classe. Por exemplo, o seguinte define uma Person
classe:
class Person:
pass
Linguagem de código: Python ( python )
Para criar um objeto a partir da Person
classe, você usa o nome da classe seguido de parênteses ()
, como se estivesse chamando uma função:
person = Person()
Linguagem de código: Python ( python )
Neste exemplo, the person
é uma instância da Person
classe. As aulas podem ser chamadas .
Definir atributos de instância
Python é dinâmico. Isso significa que você pode adicionar um atributo a uma instância de uma classe dinamicamente em tempo de execução.
Por exemplo, o seguinte adiciona o name
atributo ao person
objeto:
person.name = 'John'
Linguagem de código: Python ( python )
Porém, se você criar outro Person
objeto, o novo objeto não terá o name
atributo.
Para definir e inicializar um atributo para todas as instâncias de uma classe, você usa o __init__
método. O seguinte define a Person
classe com dois atributos de instância name
e age
:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
Linguagem de código: Python ( python )
Quando você cria um Person
objeto, o Python chama automaticamente o __init__
método para inicializar os atributos da instância. No __init__
método, the self
é a instância da Person
classe.
O seguinte cria um Person
objeto chamado person
:
person = Person('John', 25)
Linguagem de código: Python ( python )
O person
objeto agora possui os atributos name
e age
. Para acessar um atributo de instância, você usa a notação de ponto. Por exemplo, o seguinte retorna o valor do atributo name do person
objeto:
person.name
Linguagem de código: Python ( python )
Definir métodos de instância
O seguinte adiciona um método de instância chamado greet()
à Person
classe:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"Hi, it's {self.name}."
Linguagem de código: Python ( python )
Para chamar um método de instância, você também usa a notação de ponto. Por exemplo:
person = Person('John', 25)
print(person.greet())
Linguagem de código: Python ( python )
Saída:
Hi, it's John
Linguagem de código: Python ( python )
Definir atributos de classe
Ao contrário dos atributos de instância, os atributos de classe são compartilhados por todas as instâncias da classe. Eles são úteis se você deseja definir constantes ou variáveis de classe que controlam o número de instâncias de uma classe.
Por exemplo, o seguinte define o counter
atributo de classe na Person
classe:
class Person:
counter = 0
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f"Hi, it's {self.name}."
Linguagem de código: Python ( python )
Você pode acessar o counter
atributo da Person
classe:
Person.counter
Linguagem de código: Python ( python )
Ou de qualquer instância da Person
classe:
person = Person('John',25)
person.counter
Linguagem de código: Python ( python )
Para tornar a counter
variável mais útil, você pode aumentar seu valor em um assim que um objeto for criado. Para fazer isso, você aumenta o counter
atributo class no __init__
método:
class Person:
counter = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.counter += 1
def greet(self):
return f"Hi, it's {self.name}."
Linguagem de código: Python ( python )
O seguinte cria duas instâncias da Person
classe e mostra o valor de counter
:
p1 = Person('John', 25)
p2 = Person('Jane', 22)
print(Person.counter)
Linguagem de código: Python ( python )
Saída:
2
Linguagem de código: Python ( python )
Definir método de classe
Assim como um atributo de classe, um método de classe é compartilhado por todas as instâncias da classe. O primeiro argumento de um método de classe é a própria classe. Por convenção, seu nome é cls
. Python passa automaticamente esse argumento para o método de classe. Além disso, você usa o decorador @classmethod para decorar um método de classe.
O exemplo a seguir define um método de classe que retorna um Person
objeto anônimo:
class Person:
counter = 0
def __init__(self, name, age):
self.name = name
self.age = age
Person.counter += 1
def greet(self):
return f"Hi, it's {self.name}."
@classmethod
def create_anonymous(cls):
return Person('Anonymous', 22)
Linguagem de código: Python ( python )
O seguinte mostra como chamar o create_anonymous()
método de classe:
anonymous = Person.create_anonymous()
print(anonymous.name) # Anonymous
Linguagem de código: Python ( python )
Definir método estático
Um método estático não está vinculado a uma classe ou a qualquer instância da classe. Em Python, você usa métodos estáticos para agrupar funções logicamente relacionadas em uma classe. Para definir um método estático, você usa o @staticmethod
decorador.
Por exemplo, o seguinte define uma classe TemperatureConverter
que possui dois métodos estáticos que convertem de Celsius para Fahrenheit e vice-versa:
class TemperatureConverter:
@staticmethod
def celsius_to_fahrenheit(c):
return 9 * c / 5 + 32
@staticmethod
def fahrenheit_to_celsius(f):
return 5 * (f - 32) / 9
Linguagem de código: Python ( python )
Para chamar um método estático, você usa a ClassName.static_method_name()
sintaxe. Por exemplo:
f = TemperatureConverter.celsius_to_fahrenheit(30)
print(f) # 86
Linguagem de código: Python ( python )
Observe que Python não passa implicitamente uma instância ( self
) e também uma classe ( cls
) como o primeiro argumento de um método estático.
Herança única
Uma classe pode reutilizar outra classe herdando-a. Quando uma classe filha herda de uma classe pai, a classe filha pode acessar os atributos e métodos da classe pai.
Por exemplo, você pode definir uma Employee
classe que herda da Person
classe:
class Employee(Person):
def __init__(self, name, age, job_title):
super().__init__(name, age)
self.job_title = job_title
Linguagem de código: Python ( python )
Dentro do __init__
método da Employee
classe chama o __init__
método da Person
classe para inicializar os atributos name
e age
. O super()
permite que uma classe filha acesse um método da classe pai.
A Employee
classe estende a Person
classe adicionando mais um atributo chamado job_title
.
A Person
é a classe pai enquanto a Employee
é uma classe filha. Para substituir o greet()
método na Person
classe, você pode definir o greet()
método na Employee
classe da seguinte forma:
class Employee(Person):
def __init__(self, name, age, job_title):
super().__init__(name, age)
self.job_title = job_title
def greet(self):
return super().greet() + f" I'm a {self.job_title}."
Linguagem de código: Python ( python )
O greet()
método no Employee
também é chamado de greet()
método da Person
classe. Em outras palavras, ele delega para um método da classe pai.
O seguinte cria uma nova instância da Employee
classe e chama o greet()
método:
employee = Employee('John', 25, 'Python Developer')
print(employee.greet())
Linguagem de código: Python ( python )
Saída:
Hi, it's John. I'm a Python Developer.
Linguagem de código: Python ( python )
Neste tutorial, você aprendeu uma breve visão geral da programação orientada a objetos em Python.