Compartilhamento de tecnologia

Explore a programação [orientada a objetos Python]: explicação detalhada dos paradigmas de programação avançados na nova era

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Índice

1. Conceitos de programação orientada a objetos (OOP)

1.1 O que são classes e objetos?

1.2 Definição de classe

1.3 Relacionamento entre classes e objetos

1.4 Compreensão de Xiao Li

2. Abstração

2.1 Conceitos abstratos

2.2 Classes e métodos abstratos

2.3 Compreensão de Xiao Li

3. Classes e instâncias

3.1 Definição e instanciação de classe

3.2 Atributos e métodos de classe

3.3 Compreensão de Xiao Li

4. Encapsulamento/Interface

4.1 Conceito de encapsulamento

4.2 Conceito de interface

4.3 Compreensão de Xiao Li

5. Herança

5.1 O conceito de herança

5.2 Reescrita do método

5.3 Compreensão de Xiao Li

6. Polimorfismo

6.1 O conceito de polimorfismo

6.2 Implementar polimorfismo

6.3 Compreensão de Xiao Li

7. Introspecção/Reflexão

7.1 O conceito de introspecção

7.2 Usando introspecção para operações dinâmicas

7.3 Compreensão de Xiao Li

8. Métodos estáticos e métodos de classe

8.1 Métodos estáticos

8.2 Métodos de classe

Resumir


 

Coluna: notas de estudo python

Volume anterior: Modularização Python e gerenciamento de pacotes

1. Conceitos de programação orientada a objetos (OOP)

Programação orientada a objetos (OOP) É um paradigma de programação implementado organizando programas em coleções de objetos. Os objetos contêm não apenas dados, mas também métodos para manipular esses dados. Os conceitos básicos de OOP incluem classes, objetos, propriedades e métodos.

1.1 O que são classes e objetos?

  • Aula É um modelo ou projeto usado para criar objetos. As classes definem as propriedades e o comportamento dos objetos.
  • Objeto É uma instância da classe. Criar um objeto é criar uma instância específica baseada na classe.

exemplo:

  1. class Dog:
  2. # 类的初始化方法
  3. def __init__(self, name, age):
  4. self.name = name # 属性
  5. self.age = age # 属性
  6. # 方法
  7. def bark(self):
  8. return f"{self.name} says Woof!"
  9. # 创建对象
  10. my_dog = Dog("Rex", 5)
  11. print(my_dog.bark())

1.2 Definição de classe

Em Python, as classes passam class Definição de palavra-chave. As funções em uma classe são chamadas de métodos e as variáveis ​​são chamadas de propriedades.Os métodos de classe geralmente começam comself Como primeiro parâmetro, representa a própria instância.

exemplo:

  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def meow(self):
  5. return f"{self.name} says Meow!"
  6. # 创建对象
  7. my_cat = Cat("Whiskers")
  8. print(my_cat.meow())

1.3 Relacionamento entre classes e objetos

Uma classe é um modelo para um objeto e define a estrutura e o comportamento do objeto. Objetos são instâncias de classes e cada objeto possui propriedades e métodos independentes.

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. def greet(self):
  6. return f"Hello, my name is {self.name} and I am {self.age} years old."
  7. # 创建多个对象
  8. person1 = Person("Alice", 30)
  9. person2 = Person("Bob", 25)
  10. print(person1.greet())
  11. print(person2.greet())

1.4 Compreensão de Xiao Li

Uma classe é como um molde de biscoito, ela define o formato e o tamanho do biscoito. Os objetos são como biscoitos de concreto feitos a partir de um molde. Cada biscoito pode ter sabores (propriedades) diferentes, mas sua forma e tamanho (estrutura e comportamento) são os mesmos.

2. Abstração

abstrato Refere-se à simplificação de problemas complexos do mundo real, apreendendo as principais características e ignorando os detalhes. Na programação, a abstração nos ajuda a criar um código mais conciso e de fácil manutenção.

2.1 Conceitos abstratos

Abstração consiste em extrair as principais características de um objeto, ignorando detalhes sem importância. Através da abstração, podemos focar na funcionalidade central de um objeto sem nos distrairmos com recursos secundários.

exemplo:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def make_sound(self):
  5. pass # 抽象方法,不具体实现
  6. class Dog(Animal):
  7. def make_sound(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def make_sound(self):
  11. return "Meow!"
  12. # 创建对象
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.make_sound())
  16. print(cat.make_sound())

2.2 Classes e métodos abstratos

Em Python, podemos alcançar a abstração definindo classes e métodos abstratos. Classes abstratas não podem ser instanciadas, apenas herdadas. Os métodos abstratos são definidos na classe abstrata, mas implementados em subclasses.

exemplo:

  1. from abc import ABC, abstractmethod
  2. class Vehicle(ABC):
  3. @abstractmethod
  4. def start_engine(self):
  5. pass
  6. class Car(Vehicle):
  7. def start_engine(self):
  8. return "Car engine started"
  9. class Motorcycle(Vehicle):
  10. def start_engine(self):
  11. return "Motorcycle engine started"
  12. # 创建对象
  13. car = Car()
  14. motorcycle = Motorcycle()
  15. print(car.start_engine())
  16. print(motorcycle.start_engine())

2.3 Compreensão de Xiao Li

Abstração é como reduzir uma pintura complexa a formas geométricas. Por exemplo, um gato específico tem muitas características (cor da pelagem, tamanho, idade, etc.), mas focamos apenas na característica do miado. Esta é a abstração do gato.

3. Classes e instâncias

Classes e instâncias É a base da OOP. As classes são modelos e as instâncias são objetos concretos. As instâncias são criadas a partir de uma classe e possuem as propriedades e métodos definidos pela classe.

3.1 Definição e instanciação de classe

Definir uma classe e criar uma instância são as operações básicas da OOP. As classes definem propriedades e métodos, e as instâncias são objetos concretos da classe.

exemplo:

  1. class Student:
  2. def __init__(self, name, grade):
  3. self.name = name
  4. self.grade = grade
  5. def introduce(self):
  6. return f"Hi, I am {self.name} and I am in grade {self.grade}."
  7. # 创建实例
  8. student1 = Student("Alice", 10)
  9. student2 = Student("Bob", 12)
  10. print(student1.introduce())
  11. print(student2.introduce())

3.2 Atributos e métodos de classe

Os atributos de uma classe são o estado do objeto e os métodos são o comportamento do objeto.Atributos de classe são aprovados__init__ Inicialização do método, o método é definido na classe.

exemplo:

  1. class Book:
  2. def __init__(self, title, author):
  3. self.title = title
  4. self.author = author
  5. def get_info(self):
  6. return f"'{self.title}' by {self.author}"
  7. # 创建实例
  8. book = Book("1984", "George Orwell")
  9. print(book.get_info())

3.3 Compreensão de Xiao Li

Classes e instâncias são como o desenho de uma casa e uma casa real. Os desenhos (classes) definem a estrutura e funcionalidade da casa, enquanto a própria casa (instância) é o objeto concreto construído de acordo com os desenhos.

4. Encapsulamento/Interface

encapsulamento Ele oculta o status (propriedades) e o comportamento (métodos) do objeto dentro da classe e interage com o mundo externo por meio da interface (métodos). O encapsulamento melhora a segurança e a capacidade de manutenção do código.

4.1 Conceito de encapsulamento

O encapsulamento é um dos conceitos centrais da OOP. Ele protege os dados do objeto, ocultando o estado interno do objeto e expondo apenas as interfaces necessárias. Dessa forma, o código externo não pode acessar ou modificar diretamente o estado interno do objeto, podendo apenas manipular os dados por meio dos métodos fornecidos pelo objeto.

exemplo:

  1. class Account:
  2. def __init__(self, owner, balance=0):
  3. self.owner = owner
  4. self.__balance = balance # 私有属性
  5. def deposit(self, amount):
  6. if amount > 0:
  7. self.__balance += amount
  8. else:
  9. raise ValueError("Deposit amount must be positive")
  10. def withdraw(self, amount):
  11. if 0 < amount <= self.__balance:
  12. self.__balance -= amount
  13. else:
  14. raise ValueError("Insufficient funds or invalid amount")
  15. def get_balance(self):
  16. return self.__balance
  17. # 创建实例
  18. account = Account("John")
  19. account.deposit(100)
  20. print(account.get_balance())

4.2 Conceito de interface

Uma interface é a única maneira pela qual um objeto interage com o mundo exterior. Através de interfaces, o código externo pode chamar os métodos do objeto, mas não pode acessar diretamente o estado interno do objeto.

exemplo:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.__engine_started = False
  5. def start_engine(self):
  6. if not self.__engine_started:
  7. self.__engine_started = True
  8. return "Engine started"
  9. else:
  10. return "Engine is already running"
  11. def stop_engine(self):
  12. if self.__engine_started:
  13. self.__engine_started = False
  14. return "Engine stopped"
  15. else:
  16. return "Engine is not running"
  17. # 创建实例
  18. car = Car("Toyota")
  19. print(car.start_engine())
  20. print(car.stop_engine())

4.3 Compreensão de Xiao Li

A embalagem é como a de um celular. Os circuitos e componentes (estado do objeto) dentro do celular são encapsulados na caixa. O usuário só pode interagir com o celular através dos botões e da tela (interface), mas não pode entrar em contato diretamente com os componentes internos.

5. Herança

herdar É outro conceito central de OOP, que nos permite criar uma nova classe baseada em uma classe existente. A nova classe herda todas as propriedades e métodos da classe existente.

5.1 O conceito de herança

Herança é quando uma classe (subclasse) obtém propriedades e métodos de outra classe (classe pai). Através da herança, as subclasses podem reutilizar o código da classe pai, adicionar novas propriedades e métodos ou substituir os métodos da classe pai.

exemplo:

  1. class Animal:
  2. def __init__(self, name):
  3. self.name = name
  4. def speak(self):
  5. pass
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. class Cat(Animal):
  10. def speak(self):
  11. return "Meow!"
  12. # 创建实例
  13. dog = Dog("Rex")
  14. cat = Cat("Whiskers")
  15. print(dog.speak())
  16. print(cat.speak())

5.2 Reescrita do método

Uma subclasse pode substituir o método da classe pai, ou seja, definir um método com o mesmo nome da classe pai na subclasse para obter funções diferentes.

exemplo:

  1. class Shape:
  2. def area(self):
  3. return 0
  4. class Rectangle(Shape):
  5. def __init__(self, width, height):
  6. self.width = width
  7. self.height = height
  8. def area(self):
  9. return self.width * self.height
  10. class Circle(Shape):
  11. def __init__(self, radius):
  12. self.radius = radius
  13. def area(self):
  14. return 3.14 * (self.radius ** 2)
  15. # 创建实例
  16. rectangle = Rectangle(3, 4)
  17. circle = Circle(5)
  18. print(rectangle.area())
  19. print(circle.area())

5.3 Compreensão de Xiao Li

A herança é como um legado dado pelos pais aos filhos. Os pais (classe pai) passam suas propriedades (propriedades e métodos) para seus filhos (subclasses), e os filhos podem não apenas usar essas propriedades, mas também enriquecer por meio de seus próprios esforços (adicionando novas propriedades e métodos).

6. Polimorfismo

Polimorfismo Isso significa que o mesmo método tem manifestações diferentes em objetos diferentes. O polimorfismo nos permite chamar métodos de objetos diferentes através da mesma interface para obter funções diferentes.

6.1 O conceito de polimorfismo

O polimorfismo é uma das características importantes da OOP. Ele aponta para objetos de subclasse por meio de referências de classe pai, permitindo que o mesmo método tenha implementações diferentes. O polimorfismo aumenta a flexibilidade e escalabilidade do código.

exemplo:

  1. class Animal:
  2. def speak(self):
  3. pass
  4. class Dog(Animal):
  5. def speak(self):
  6. return "Woof!"
  7. class Cat(Animal):
  8. def speak(self):
  9. return "Meow!"
  10. def animal_sound(animal):
  11. print(animal.speak())
  12. # 创建实例
  13. dog = Dog()
  14. cat = Cat()
  15. animal_sound(dog)
  16. animal_sound(cat)

 

6.2 Implementar polimorfismo

Em Python, o polimorfismo geralmente é implementado por meio de substituição de método e referências de classe pai. Apontando para o objeto da subclasse por meio da referência da classe pai, você pode chamar o método da subclasse.

exemplo:

  1. class Shape:
  2. def draw(self):
  3. pass
  4. class Rectangle(Shape):
  5. def draw(self):
  6. return "Drawing a rectangle"
  7. class Circle(Shape):
  8. def draw(self):
  9. return "Drawing a circle"
  10. def draw_shape(shape):
  11. print(shape.draw())
  12. # 创建实例
  13. rectangle = Rectangle()
  14. circle = Circle()
  15. draw_shape(rectangle)
  16. draw_shape(circle)

 

6.3 Compreensão de Xiao Li

O polimorfismo é como um controle remoto universal. Seja controlando uma TV, ar condicionado ou aparelho de som, desde que esses dispositivos possuam interfaces (métodos) correspondentes, o controle remoto (referência da classe pai) pode implementar diferentes funções através dos mesmos botões (chamadas de métodos).

7. Introspecção/Reflexão

introspecção Isso significa que o objeto pode conhecer suas próprias informações em tempo de execução. Python fornece algumas funções integradas para introspecção, comotype()id()hasattr() espere.

7.1 O conceito de introspecção

Introspecção significa que um objeto pode obter suas próprias informações em tempo de execução, como propriedades, métodos, etc. A introspecção torna os programas Python altamente dinâmicos e flexíveis.

exemplo:

  1. class Person:
  2. def __init__(self, name, age):
  3. self.name = name
  4. self.age = age
  5. person = Person("Alice", 30)
  6. # 使用内置函数进行自省
  7. print(type(person))
  8. print(hasattr(person, "name"))
  9. print(getattr(person, "name"))
  10. setattr(person, "name", "Bob")
  11. print(person.name)
  12. delattr(person, "name")

7.2 Usando introspecção para operações dinâmicas

Através da introspecção, podemos manipular dinamicamente as propriedades e métodos dos objetos em tempo de execução, tornando o programa mais flexível e dinâmico.

exemplo:

  1. class Car:
  2. def __init__(self, model):
  3. self.model = model
  4. self.speed = 0
  5. def accelerate(self):
  6. self.speed += 5
  7. return self.speed
  8. car = Car("Toyota")
  9. # 动态操作对象
  10. if hasattr(car, "accelerate"):
  11. method = getattr(car, "accelerate")
  12. print(method())
  13. print(method())
  14. # 动态设置属性
  15. setattr(car, "color", "red")
  16. print(car.color)

7.3 Compreensão de Xiao Li

O autoexame é como se olhar no espelho. Através do espelho (mecanismo de introspecção), as pessoas podem ver sua aparência (propriedades e métodos dos objetos) e fazer ajustes conforme necessário (manipulação dinâmica de objetos).

8. Métodos estáticos e métodos de classe

método estático emétodo de classe são métodos associados à classe, não à instância.Uso de método estático@staticmethod Decorador, uso de método de classe@classmethod Decorador.

8.1 Métodos estáticos

Um método estático é um método de uma classe, mas não está vinculado a nenhuma instância de classe. Os métodos estáticos não podem acessar instâncias de uma classe nem modificar o estado da classe. Eles geralmente são usados ​​para realizar alguma operação que não tem nada a ver com a classe, mas pertence logicamente à funcionalidade da classe.

exemplo:

  1. class Math:
  2. @staticmethod
  3. def add(a, b):
  4. return a + b
  5. print(Math.add(5, 3))

 

8.2 Métodos de classe

Métodos de classe são métodos vinculados à classe e não à instância.O primeiro argumento para um método de classe é a própria classe, geralmente chamadacls . Os métodos de classe podem acessar as propriedades da classe e de outros métodos de classe.

exemplo:

  1. class Math:
  2. factor = 2
  3. @classmethod
  4. def multiply(cls, value):
  5. return cls.factor * value
  6. print(Math.multiply(5))

Resumir

Todos os aspectos da programação orientada a objetos em Python, incluindo conceitos básicos de programação orientada a objetos, abstrações, classes e instâncias, encapsulamento, herança, polimorfismo, introspecção e métodos estáticos e de classe.

Espero que este blog detalhado possa ajudá-lo a compreender profundamente a programação orientada a objetos em Python e a aplicar esse conhecimento em projetos reais. Se você tiver alguma dúvida ou precisar de mais ajuda, não hesite em entrar em contato comigo!