English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
在本文中,您将通过示例了解Python中的面向对象编程(OOP)及其基本概念。
Python是一种多范式编程语言。意思是说,它支持不同的编程方法。
解决编程问题的一种流行方法是创建对象。也就是所谓的面向对象编程(OOP)。
一个对象具有两个特征:
属性
行为
让我们举个示例:
鹦鹉是一个物体,
名称,年龄,颜色是属性
唱歌,跳舞都是行为
Python中的OOP概念专注于创建可重用的代码。此概念也称为DRY(Don't Repeat Yourself)不要重复自己。
在Python中,OOP的概念遵循一些基本原则:
继承 | 使用新类的详细信息而不修改现有类的过程。 |
封装 | 对其他对象隐藏类的私有细节。 |
多态 | 对不同的数据输入以不同的方式使用通用操作的概念。 |
类是对象的蓝图。
我们可以将类看作是带有标签的鹦鹉的素描。它包含有关名称,颜色,大小等的所有详细信息。基于这些描述,我们可以研究鹦鹉。在这里,鹦鹉是一个对象。
鹦鹉类的示例可以是:
class Parrot: pass
在这里,我们使用class关键字来定义一个空类Parrot。我们从类中构造示例。示例是由特定类创建的特定对象。
对象(示例)是类的示例。定义类时,仅定义对象的描述。因此,没有分配内存或存储。
鹦鹉类对象的示例可以是:
obj = Parrot()
在这里,obj是Parrot类的对象。
假设我们有鹦鹉的详细信息。下面,我们将展示如何构建鹦鹉的类和对象。
class Parrot: # 类属性 species = "bird" # Atributos de exemplo def __init__(self, name, age): self.name = name self.age = age # Criação de exemplos da classe Parrot blu = Parrot("Pomba", 10) woo = Parrot("Papagaio", 15) # Acesso aos atributos de classe print("Pomba é {}".format(blu.__class__.species)) print("Papagaio também é {}".format(woo.__class__.species)) # Acesso aos atributos de exemplo print("{} tem {} anos".format(blu.name, blu.age)) print("{} tem {} anos".format(woo.name, woo.age))
Quando executamos o programa, a saída será:
Pomba é pássaro Papagaio também é pássaro Pomba tem 10 anos Papagaio tem 15 anos
No programa acima, criamos um objeto chamadoParrotclasse. Em seguida, definimos atributos. Atributos são características do objeto.
Em seguida, criamosParrotExemplo de classe. Aqui,bluewooé a referência (valor) do nosso novo objeto.
Em seguida, usamos class .species para acessar atributos de classe. Os atributos de classe de todos os exemplos da classe são os mesmos. Da mesma forma, usamos blu.name e blu.age para acessar atributos de exemplo. No entanto, para cada exemplo da classe, os atributos de exemplo são diferentes.
Para obter mais informações sobre classes e objetos, vá paraClasse e objeto Python.
Métodos são funções definidas dentro do corpo da classe. Eles são usados para definir o comportamento dos objetos.
class Parrot: # Atributos de exemplo def __init__(self, name, age): self.name = name self.age = age # Métodos de exemplo def sing(self, song): return "{} canta {}".format(self.name, song) def dance(self): return "{} está dançando".format(self.name) # Criação do objeto de exemplo blu = Parrot("Blu", 10) # Chama nossos métodos de exemplo print(blu.sing("'Happy'")) print(blu.dance())
Quando executamos o programa, a saída será:
Blu canta 'Happy' Blu está dançando
No programa acima, definimos dois métodos, ou seja, sing() e dance(). Eles são chamados de métodos de exemplo porque são chamados no objeto de exemplo (ou seja, blu).
Herança é um método para criar uma nova classe, usando-a sem modificar os detalhes da classe existente. A nova classe formada é uma classe derivada (ou subclasse). Da mesma forma, a classe existente é uma classe base (ou classe pai).
# Clase base class Bird: def __init__(self): print("Pássaro está pronto") def whoisThis(self): print("Pássaro") def swim(self): print("Nadando mais rápido") # Subclasse class Penguin(Bird): def __init__(self): # Chamar função super() super().__init__() print("Pinguim está pronto") def whoisThis(self): print("Pinguim") def run(self): print("Correndo mais rápido") peggy = Penguin() peggy.whoisThis() peggy.swim() peggy.run()
Quando executamos o programa, a saída será:
Pássaro está pronto Pinguim está pronto Pinguim Nadando mais rápido Correndo mais rápido
No programa acima, criamos duas classes, ou sejaPássaro(Classe pai)ePenguin(Subclasse)。A subclasse herda as funcionalidades da classe pai. Podemos ver isso no método swim(). A subclasse novamente muda o comportamento da classe pai. Isso pode ser visto no método whoisThis(). Além disso, através da criação de um novo método run(), expandimos as funcionalidades da classe pai.
Além disso, usamos a função super() antes do método init(). Isso porque queremos trazer o conteúdo do método init() da classe pai para a classe filha.
Ao usar OOP em Python, podemos limitar o acesso a métodos e variáveis. Isso evita que os dados sejam modificados diretamente (conhecido como encapsulamento). Em Python, usamos sublinhado como prefixo para representar atributos privados, ou seja, um único "_" ou dois "__".
class Computer: def __init__(self): self.__maxprice = 900 def sell(self): print("Preço de venda: {}".format(self.__maxprice)) def setMaxPrice(self, price): self.__maxprice = price c = Computer() c.sell() # Alterar preço c.__maxprice = 1000 c.sell() # Usar função setter c.setMaxPrice(1000) c.sell()
Quando executamos o programa, a saída será:
Preço: 900 Preço: 900 Preço: 1000
No programa acima, definimosComputerClasse. Usamos o método __init__() para armazenar o preço mais alto do computador. Tentamos modificar o preço. No entanto, não podemos alterá-lo porque o Python__maxpriceconsiderada propriedade privada. Para alterar esse valor, usamos a função setter, ou seja, setMaxPrice(), que usa price como parâmetro.
Polimorfismo é uma funcionalidade (em OOP) que pode usar uma interface comum para várias formas (tipos de dados).
Suponha que precisemos pintar uma forma, há várias opções de forma (retângulo, quadrado, círculo). No entanto, podemos usar o mesmo método para pintar qualquer forma. Este conceito é chamado de polimorfismo.
class Parrot: def fly(self): print("O papagaio voa") def swim(self): print("O papagaio não pode nadar") class Penguin: def fly(self): print("O pinguim não voa") def swim(self): print("O pinguim pode nadar") # Interface genérica def flying_test(bird): bird.fly() # Exemplo blu = Parrot() peggy = Penguin() # Passar objetos flying_test(blu) flying_test(peggy)
Quando executamos o programa acima, a saída será:
O papagaio voa O pinguim não voa
No programa acima, definimos duas classesParrotePenguin. Cada um deles tem um método fly() genérico. No entanto, suas funções são diferentes. Para permitir a polimorfia, criamos uma interface genérica, ou seja, a função flying_test() pode aceitar qualquer função de objeto. Em seguida, passamosbluepeggyObjeto, que opera eficazmente.
Torna a programação simples e eficaz.
As classes são compartilháveis, portanto, o código pode ser reutilizado.
Aumenta a produtividade dos programadores
Através da abstração de dados, os dados são seguros.