Programação Orientada a Objetos Python

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 classpalavra-chave seguida do nome da classe. Por exemplo, o seguinte define uma Personclasse:

class Person:
    passLinguagem de código:  Python  ( python )

Para criar um objeto a partir da Personclasse, 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 Personclasse. 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 nameatributo ao personobjeto:

person.name = 'John'Linguagem de código:  Python  ( python )

Porém, se você criar outro Personobjeto, o novo objeto não terá o nameatributo.

Para definir e inicializar um atributo para todas as instâncias de uma classe, você usa o __init__método. O seguinte define a Personclasse com dois atributos de instância namee age:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = ageLinguagem de código:  Python  ( python )

Quando você cria um Personobjeto, 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 Personclasse.

O seguinte cria um Personobjeto chamado person:

person = Person('John', 25)Linguagem de código:  Python  ( python )

O personobjeto agora possui os atributos namee 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 personobjeto:

person.nameLinguagem de código:  Python  ( python )

Definir métodos de instância

O seguinte adiciona um método de instância chamado greet()à Personclasse:

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 JohnLinguagem 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 counteratributo de classe na Personclasse:

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 counteratributo da Personclasse:

Person.counterLinguagem de código:  Python  ( python )

Ou de qualquer instância da Personclasse:

person = Person('John',25)
person.counterLinguagem de código:  Python  ( python )

Para tornar a countervariável mais útil, você pode aumentar seu valor em um assim que um objeto for criado. Para fazer isso, você aumenta o counteratributo 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 Personclasse 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:

2Linguagem 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 Personobjeto 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)  # AnonymousLinguagem 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 @staticmethoddecorador.

Por exemplo, o seguinte define uma classe TemperatureConverterque 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) / 9Linguagem 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)  # 86Linguagem 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 Employeeclasse que herda da Personclasse:

class Employee(Person):
    def __init__(self, name, age, job_title):
        super().__init__(name, age)
        self.job_title = job_titleLinguagem de código:  Python  ( python )

Dentro do __init__método da Employeeclasse chama o __init__método da Personclasse para inicializar os atributos namee age. O super()permite que uma classe filha acesse um método da classe pai.

A Employeeclasse estende a Personclasse 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 Personclasse, você pode definir o greet()método na Employeeclasse 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 Employeetambém é chamado de greet()método da Personclasse. Em outras palavras, ele delega para um método da classe pai.

O seguinte cria uma nova instância da Employeeclasse 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *