Programação Orientada a Objetos (OOP): Entenda os principais conceitos de classes e encapsulamento

Objeto

O que é um objeto?

Um objeto é uma área de memória dedicada ao armazenamento de dados. Vários dados podem ser armazenados em objetos, como números, valores booleanos e códigos. O objeto consiste em três partes:

  1. O identificador do objeto (id)
  2. Tipo de objeto (tipo)
  3. O valor do objeto

Orientado a Objetos (OOP)

Python é uma linguagem de programação orientada a objetos. A chamada linguagem orientada a objetos simplesmente entende que todas as operações na linguagem são realizadas através de objetos.

linguagem de programação processual

Orientado ao processo refere-se à decomposição da lógica do nosso programa em etapas, uma por uma, e à conclusão do programa abstraindo cada etapa. Por exemplo, o processo de ida de uma criança à escola pode ser dividido em várias etapas:

  1. Mamãe se levanta
  2. Mamãe vai ao banheiro
  3. Mamãe lava
  4. Mamãe faz café da manhã
  5. Mãe acorda a criança
  6. criança vai ao banheiro
  7. A criança precisa se lavar
  8. crianças comem
  9. Criança carregando mochila para a escola

A ideia de programação orientada a processos decompõe uma função em pequenos passos e completa um programa completando cada pequeno passo. Este método de programação é relativamente simples e está de acordo com o pensamento humano. No entanto, sua reutilização é baixa e difícil de manter.

linguagem de programação orientada a objetos

As linguagens de programação orientadas a objetos concentram-se em objetos e não em processos. Para linguagens orientadas a objetos, tudo é um objeto. Por exemplo, a mãe da criança acorda e chama a criança para ir à escola.

A ideia de programação orientada a objetos salva uniformemente todas as funções nos objetos correspondentes. Para usar uma determinada função, basta encontrar o objeto correspondente diretamente. O código escrito dessa maneira é fácil de ler, manter e reutilizar. No entanto, este método é um pouco mais difícil de escrever e não está de acordo com o pensamento convencional.

Resumindo, o pensamento de programação orientada a objetos inclui principalmente duas etapas:

  1. ache um companheiro
  2. Envolva-se em objetos

aula

Em Python, podemos usar objetos integrados (como int, float, str, etc.) para criar objetos. Porém, ele não consegue atender a todas as necessidades, por isso muitas vezes precisamos customizar alguns objetos. Simplificando, uma aula equivale a um desenho. Precisamos criar objetos baseados nas classes do programa. Algumas pessoas também dizem que os objetos são instâncias de classes. Se vários objetos forem criados por meio de uma classe, chamamos esses objetos de classe de objetos, assim como objetos como int(), float(), bool(), str(), list(), dict() . Ao definir sua própria classe, você precisa começar com uma letra maiúscula e usar camel case (notação Pascal) para nomear a classe.

#定义一个简单的类
class MyClass():
    pass

mc = MyClass()

O processo de criação de objetos usando classes

Use classes para criar objetos da mesma forma que chama uma função. Seu processo é o seguinte:

1. Crie uma variável

2. Crie um novo objeto na memória

3. Atribua o id do objeto à variável

Definição de classe

Na verdade, classes e objetos são abstrações de coisas da vida real ou de conteúdo de programas. Dentro do bloco de código de uma classe, podemos definir variáveis ​​e funções. A variável se tornará uma propriedade pública da instância da classe e todas as instâncias da classe poderão ser acessadas na forma de object.property name. A função se tornará um método público da instância da classe, e todas as instâncias da classe poderão chamar o método na forma de object.methodname(). Ao definir um método, pelo menos um parâmetro formal deve ser definido. Quando um método é chamado, o analisador procurará primeiro o atributo ou método no objeto atual, caso contrário, procurará no objeto de classe do objeto atual. Se ainda não houver objeto de classe, um erro será relatado.

#定义一个简单的人类
class Person :
    name = 'swk' # 公共属性,所有实例都可以访问

    def say_hello(self) :
        print('你好!我是 %s' %self.name)
        
p1 = Person()
p2 = Person()

p1.name = '猪八戒'

p1.say_hello() # '你好!我是 猪八戒'
p2.say_hello() # '你好!我是 swk'

demonstração de código

#定义一个简单的类
class MyClass():
    pass

#使用MyClass创建一个对象
mc = MyClass() # mc就是通过MyClass创建的对象,mc是MyClass的实例
mc_2 = MyClass()
mc_3 = MyClass()
mc_4 = MyClass()

# isinstance()用来检查一个对象是否是一个类的实例
result = isinstance(mc_2,MyClass)

#现在我们通过MyClass这个类创建的对象都是一个空对象
#也就是对象中实际上什么都没有,就相当于是一个空的盒子
#可以向对象中添加变量,对象中的变量称为属性
#语法:对象.属性名 = 属性值
mc.name = '孙悟空'
mc_2.name = '猪八戒'

print(mc_2.name)

#定义一个简单的人类
class Person :
    name = 'swk' # 公共属性,所有实例都可以访问

    def say_hello(self) :
        print('你好!我是 %s' %self.name)
        
p1 = Person()
p2 = Person()

p1.name = '猪八戒'

p1.say_hello() # '你好!我是 猪八戒'
p2.say_hello() # '你好!我是 swk'

Métodos de inicialização e propriedades de instância

Em uma classe, podemos definir um método especial chamado método de inicialização ( init ), que é chamado automaticamente quando um objeto é criado. O método de inicialização pode aceitar parâmetros e atribuir esses parâmetros às propriedades do objeto. Desta forma podemos definir valores iniciais diferentes para cada objeto.

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print(f"你好!我是{
      
      self.name},今年{
      
      self.age}岁。")

No código acima, definimos uma Personclasse que possui duas propriedades de instância: namee age. O método de inicialização aceita dois parâmetros e os atribui às propriedades do objeto. Ao criar objetos e chamar say_hellométodos, podemos acessar e modificar essas propriedades.

Propriedades de classe e métodos de classe

Além de propriedades e métodos de instância, as classes também podem ter propriedades e métodos de classe.

Atributos de classe são atributos que pertencem à própria classe, não à instância. Todas as instâncias desta classe podem acessar e modificar as propriedades da classe.

class Person:
    count = 0  # 类属性

    def __init__(self, name):
        self.name = name
        Person.count += 1  # 每创建一个实例,count加1

    @classmethod
    def get_count(cls):
        return cls.count  # 使用cls访问类属性

No código acima, definimos um countatributo de classe que registra o número de instâncias criadas. Sempre que uma instância é criada, o atributo de classe é countincrementado em 1 através do método de inicialização. Através de métodos de classe get_count(), podemos obter o número de instâncias criadas até o momento.

Herança e polimorfismo

As classes em Python também suportam herança, onde uma classe pode herdar propriedades e métodos de outra classe. As subclasses podem substituir os métodos da classe pai para obter efeitos polimórficos.

class Animal:
    def __init__(self, name):
        self.name = name

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        print(f"{
      
      self.name}汪汪叫")

class Cat(Animal):
    def speak(self):
        print(f"{
      
      self.name}喵喵叫")

No código acima, definimos uma Animalclasse que possui um speakmétodo. Em seguida, definimos a classe Doge Catduas subclasses respectivamente Animal. As subclasses podem substituir métodos das classes pai, o que é uma manifestação de polimorfismo. Ao criar Dogobjetos Catpodemos chamar seus respectivos speakmétodos.

método mágico

Além do método de inicialização ( init ), existem muitos métodos especiais em Python, também chamados de métodos mágicos. Esses métodos especiais começam e terminam com um sublinhado duplo e são chamados automaticamente em um momento específico.

class Person:
    def __init__(self, name):
        self.name = name

    def __str__(self):
        return f"Person对象:{
      
      self.name}"

    def __eq__(self, other):
        return self.name == other.name

No código acima, definimos dois métodos mágicos: __str__e __eq__.

  • __str__Método usado para definir uma representação em string de um objeto. Este método é chamado automaticamente e retorna uma representação de string quando a função é chamada printou usada .str()
  • __eq__Métodos são usados ​​para definir a igualdade de objetos. Ele aceita outro objeto como parâmetro e determina se os dois objetos são iguais com base na lógica personalizada.

Ao implementar esses métodos mágicos, podemos controlar melhor o comportamento dos nossos objetos e torná-los mais consistentes com as nossas expectativas.

resumo

Neste capítulo, apresentamos os conceitos básicos e o uso das classes Python. De métodos de inicialização a propriedades de instância, propriedades de classe, métodos de classe, herança e polimorfismo, temos uma compreensão aprofundada passo a passo dos vários recursos e uso das classes. Ao mesmo tempo, também aprendemos sobre a função e o uso de métodos mágicos, que podem ser implementados para personalizar o comportamento da classe.

encapsulamento de classe

Na programação orientada a objetos, o encapsulamento é um conceito importante. Refere-se à combinação de dados e métodos em uma única entidade e à ocultação de detalhes específicos de implementação de fora.

As classes em Python fornecem um mecanismo para encapsulamento. Podemos usar modificadores de acesso para controlar a acessibilidade de propriedades e métodos.

  • Modificador de acesso público: nenhum modificador é usado e todas as propriedades e métodos são públicos por padrão. Propriedades e métodos públicos podem ser acessados ​​dentro e fora da classe.
  • Modificador de acesso privado: use um sublinhado duplo (__) como prefixo para definir propriedades e métodos privados. Propriedades e métodos privados só podem ser acessados ​​dentro da classe e não podem ser acessados ​​diretamente fora da classe.
class Person:
    def __init__(self, name):
        self.__name = name  # 私有属性

    def __say_hello(self):  # 私有方法
        print(f"你好!我是{
      
      self.__name}。")

    def greet(self):
        self.__say_hello()

No código acima, nameambos say_hellosão membros privados. Propriedades e métodos privados podem ser definidos usando um sublinhado duplo como prefixo. Dentro da classe, podemos acessar diretamente esses membros privados. Fora da classe, os membros privados não podem ser acessados ​​diretamente, mas podem ser acessados ​​indiretamente através de métodos públicos.

Acessadores e setters de propriedades

Além de acessar propriedades diretamente, também podemos usar acessadores de propriedades (getters) e configuradores de propriedades (setters) para controlar o acesso e modificação de propriedades.

class Person:
    def __init__(self, name):
        self.__name = name

    @property
    def name(self):  # 属性访问器
        return self.__name

    @name.setter
    def name(self, value):  # 属性设置器
        if isinstance(value, str):
            self.__name = value
        else:
            raise ValueError("姓名必须是字符串类型")

No código acima, definimos @propertyum acessador de propriedade usando um decorador chamado name(). Acessando obj.name, podemos obter __nameo valor de uma propriedade privada. Em seguida, usamos @name.settero decorador para definir um configurador de propriedades, também denominado name(). Através da atribuição obj.name = value, podemos modificar __nameo valor de uma propriedade privada.

A vantagem disso é que, ao usar propriedades de objetos externamente, podemos acessá-las como se fossem propriedades comuns, sem acessar diretamente as propriedades privadas.

resumo

Neste artigo, apresentamos o encapsulamento e o controle de acesso a atributos de classes Python. Usando modificadores de acesso, propriedades privadas e métodos, podemos ocultar os detalhes de implementação de uma classe e fornecer uma interface pública para uso externo. Também aprendemos como usar acessadores e configuradores de propriedades para controlar o acesso e a modificação de propriedades.

Resumir

Este artigo apresenta alguns conceitos e técnicas importantes em programação orientada a objetos, incluindo objetos, classes, herança, polimorfismo, métodos mágicos, etc. Ao usar classes e objetos, podemos combinar dados e métodos em uma única entidade para obter encapsulamento e reutilização de código.

Nas linguagens de programação processuais, o foco principal está nos procedimentos e funções do programa. Nas linguagens de programação orientadas a objetos, decompomos o programa em objetos, cada um dos quais possui seus próprios dados e métodos. Dessa forma é mais flexível e fácil de entender.

Uma classe é um modelo para um objeto e vários objetos de instância podem ser criados definindo uma classe. As classes são compostas de atributos e métodos, os atributos armazenam os dados do objeto e os métodos definem o comportamento do objeto.

Métodos de inicialização e propriedades de instância são usados ​​para inicializar o estado de um objeto quando ele é criado. Os atributos de classe são propriedades compartilhadas por todas as instâncias e os métodos de classe são métodos que atuam em toda a classe, em vez de em uma única instância.

Herança e polimorfismo são dois conceitos importantes na programação orientada a objetos. Através da herança, podemos criar novas classes e herdar propriedades e métodos de classes existentes. O polimorfismo permite que diferentes objetos implementem o mesmo método de maneira diferente, melhorando a flexibilidade e escalabilidade do código.

Métodos mágicos são métodos especialmente nomeados em Python que são usados ​​para implementar funções ou comportamentos específicos, como inicialização, comparação, sobrecarga de operador, etc.

Além disso, este artigo também apresenta encapsulamento de classes e controle de acesso de atributos. Usando modificadores de acesso, propriedades privadas e métodos, você pode ocultar os detalhes de implementação de uma classe e fornecer uma interface pública para uso externo. Os acessadores e configuradores de propriedades podem controlar o acesso e a modificação de propriedades, aumentando a segurança e a capacidade de manutenção do código.

Em suma, a programação orientada a objetos é um paradigma de programação poderoso que pode alcançar modularidade, reutilização e flexibilidade de código através da decomposição de programas em objetos. Domine conceitos e técnicas como definição de classe, herança, polimorfismo e métodos mágicos, e seja capaz de escrever código mais estruturado e escalável.

Colunas boutique Python recomendadas


Conhecimento básico de python (0 introdução básica)

[conhecimento básico de Python] função 0.print()
[conhecimento básico de python] 1. Tipos de dados, aplicativos de dados, conversão de dados
[conhecimento básico de python] 2. julgamento condicional e aninhamento de condições
[conhecimento básico de python] 3.input() Funções
[Conhecimento básico de python] 4. Listas e dicionários
[Conhecimento básico de python] 5. Loops For e loops while
[Conhecimento básico de python] 6. Valores booleanos e quatro tipos de instruções (break, continue, pass, else)
[Conhecimento básico de python] 7. Operação prática - Use Python para implementar o jogo "Word PK" (1)
[Noções básicas de Python] 7. Operação prática - Use Python para implementar o jogo "Word PK" (2)
[Noções básicas de Python] 8. Pensamento de programação: como resolver problemas - Capítulo Pensando
[Conhecimento Básico de Python] 9. Definição e chamada de funções
[Conhecimento Básico de Python] 10. Escrevendo programas com funções - Capítulo Prático
[Conhecimento Básico de Python] 10. Usando Python para implementar o jogo pedra-papel-tesoura - Capítulo de operação de prática de funções
[Noções básicas de Python] 11. Como depurar - Motivos de erros comuns e ideias para solução de problemas - Capítulo de pensamento
[Noções básicas de Python] 12. Classes e objetos (1)
[Noções básicas de Python] 12 Classes e objetos (2)
[Conhecimento básico de Python] 13. Classes e objetos (3)
[Conhecimento básico de python] 13. Classes e objetos (4)
[Conhecimento básico de python] 14. Construindo um sistema de gerenciamento de biblioteca (prático operação de classes e objetos)
[Conhecimento básico de python] 15. Conhecimento básico de codificação
[Conhecimento básico de python] 16. Fundamentos de leitura, escrita e operações de arquivos
[Conhecimento básico de python] 16. Implementação em Python de "questões de ditado de poemas antigos" (leitura, escrita e codificação de arquivos - operação prática)
[Conhecimento básico de python] 17. O conceito de módulos e como introduzir
[noções básicas de python] 18. Operação prática - usando python para enviar e-mails em massa automaticamente
[noções básicas de python] 19. Pensamento de produto e uso de fluxogramas - pensamento
[noções básicas de python] 20. implementação de python de "o que comer no almoço" (Pensamento de produto - Operação prática)
[Conhecimento básico de python] 21. A maneira correta de abrir com eficiência e preguiça - Graduação
[processamento de arquivo python] Leitura, processamento e gravação de arquivos CSV
[processamento de arquivo python ] Processamento automático do Excel (usando openpyxl)
[processamento de arquivo python] - processamento de formato Excel


conhecimento do rastreador python

[python crawler] 1. Conhecimento básico de crawlers
[python crawler] 2. Conhecimento básico de páginas da web
[python crawler] 3. Primeira experiência com crawlers (análise BeautifulSoup)
[python crawler] 4. Operação prática do crawler (dish crawling)
[python crawler] 5. Operação prática do crawler (rastreamento de letras)
[python crawler] 6. Operação prática do crawler (solicitação de dados com parâmetros)
[python crawler] 7. Onde os dados rastreados são armazenados?
[python crawler] 8. Revise o passado e aprenda o novo
[python crawler] 9. Faça login com cookies (cookies)
[python crawler] 10. Comande o navegador para funcionar automaticamente (selenium)
[python crawler] 11. Deixe o crawler reporte a você na hora certa
[python crawler] 12. Construa seu exército de crawlers
[python crawler] 13. O que comer sem engordar (exercício prático do crawler)
[python crawler] 14. Explicação da estrutura Scrapy
[python crawler] 15. Prática da estrutura Scrapy (popular rastreamento de trabalho Take)
[rastreador python] 16. Resumo e revisão dos pontos de conhecimento do rastreador

Acho que você gosta

Origin blog.csdn.net/qq_41308872/article/details/132848250
Recomendado
Clasificación