minhas informações de contato
Correspondência[email protected]
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.3 Relacionamento entre classes e objetos
2.2 Classes e métodos abstratos
3.1 Definição e instanciação de classe
3.2 Atributos e métodos de classe
4.1 Conceito de encapsulamento
6.1 O conceito de polimorfismo
7.1 O conceito de introspecção
7.2 Usando introspecção para operações dinâmicas
8. Métodos estáticos e métodos de classe
Coluna: notas de estudo python
Volume anterior: Modularização Python e gerenciamento de pacotes
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.
- 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:
- class Dog:
- # 类的初始化方法
- def __init__(self, name, age):
- self.name = name # 属性
- self.age = age # 属性
-
- # 方法
- def bark(self):
- return f"{self.name} says Woof!"
-
- # 创建对象
- my_dog = Dog("Rex", 5)
- print(my_dog.bark())
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:
- class Cat:
- def __init__(self, name):
- self.name = name
-
- def meow(self):
- return f"{self.name} says Meow!"
-
- # 创建对象
- my_cat = Cat("Whiskers")
- print(my_cat.meow())
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.
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- def greet(self):
- return f"Hello, my name is {self.name} and I am {self.age} years old."
-
- # 创建多个对象
- person1 = Person("Alice", 30)
- person2 = Person("Bob", 25)
-
- print(person1.greet())
- print(person2.greet())
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.
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.
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:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def make_sound(self):
- pass # 抽象方法,不具体实现
-
- class Dog(Animal):
- def make_sound(self):
- return "Woof!"
-
- class Cat(Animal):
- def make_sound(self):
- return "Meow!"
-
- # 创建对象
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.make_sound())
- print(cat.make_sound())
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:
- from abc import ABC, abstractmethod
-
- class Vehicle(ABC):
- @abstractmethod
- def start_engine(self):
- pass
-
- class Car(Vehicle):
- def start_engine(self):
- return "Car engine started"
-
- class Motorcycle(Vehicle):
- def start_engine(self):
- return "Motorcycle engine started"
-
- # 创建对象
- car = Car()
- motorcycle = Motorcycle()
-
- print(car.start_engine())
- print(motorcycle.start_engine())
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.
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.
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:
- class Student:
- def __init__(self, name, grade):
- self.name = name
- self.grade = grade
-
- def introduce(self):
- return f"Hi, I am {self.name} and I am in grade {self.grade}."
-
- # 创建实例
- student1 = Student("Alice", 10)
- student2 = Student("Bob", 12)
-
- print(student1.introduce())
- print(student2.introduce())
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:
- class Book:
- def __init__(self, title, author):
- self.title = title
- self.author = author
-
- def get_info(self):
- return f"'{self.title}' by {self.author}"
-
- # 创建实例
- book = Book("1984", "George Orwell")
- print(book.get_info())
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.
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.
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:
- class Account:
- def __init__(self, owner, balance=0):
- self.owner = owner
- self.__balance = balance # 私有属性
-
- def deposit(self, amount):
- if amount > 0:
- self.__balance += amount
- else:
- raise ValueError("Deposit amount must be positive")
-
- def withdraw(self, amount):
- if 0 < amount <= self.__balance:
- self.__balance -= amount
- else:
- raise ValueError("Insufficient funds or invalid amount")
-
- def get_balance(self):
- return self.__balance
-
- # 创建实例
- account = Account("John")
- account.deposit(100)
- print(account.get_balance())
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:
- class Car:
- def __init__(self, model):
- self.model = model
- self.__engine_started = False
-
- def start_engine(self):
- if not self.__engine_started:
- self.__engine_started = True
- return "Engine started"
- else:
- return "Engine is already running"
-
- def stop_engine(self):
- if self.__engine_started:
- self.__engine_started = False
- return "Engine stopped"
- else:
- return "Engine is not running"
-
- # 创建实例
- car = Car("Toyota")
- print(car.start_engine())
- print(car.stop_engine())
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.
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.
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:
- class Animal:
- def __init__(self, name):
- self.name = name
-
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- # 创建实例
- dog = Dog("Rex")
- cat = Cat("Whiskers")
-
- print(dog.speak())
- print(cat.speak())
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:
- class Shape:
- def area(self):
- return 0
-
- class Rectangle(Shape):
- def __init__(self, width, height):
- self.width = width
- self.height = height
-
- def area(self):
- return self.width * self.height
-
- class Circle(Shape):
- def __init__(self, radius):
- self.radius = radius
-
- def area(self):
- return 3.14 * (self.radius ** 2)
-
- # 创建实例
- rectangle = Rectangle(3, 4)
- circle = Circle(5)
-
- print(rectangle.area())
- print(circle.area())
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).
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.
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:
- class Animal:
- def speak(self):
- pass
-
- class Dog(Animal):
- def speak(self):
- return "Woof!"
-
- class Cat(Animal):
- def speak(self):
- return "Meow!"
-
- def animal_sound(animal):
- print(animal.speak())
-
- # 创建实例
- dog = Dog()
- cat = Cat()
-
- animal_sound(dog)
- animal_sound(cat)
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:
- class Shape:
- def draw(self):
- pass
-
- class Rectangle(Shape):
- def draw(self):
- return "Drawing a rectangle"
-
- class Circle(Shape):
- def draw(self):
- return "Drawing a circle"
-
- def draw_shape(shape):
- print(shape.draw())
-
- # 创建实例
- rectangle = Rectangle()
- circle = Circle()
-
- draw_shape(rectangle)
- draw_shape(circle)
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).
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.
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:
- class Person:
- def __init__(self, name, age):
- self.name = name
- self.age = age
-
- person = Person("Alice", 30)
-
- # 使用内置函数进行自省
- print(type(person))
- print(hasattr(person, "name"))
- print(getattr(person, "name"))
- setattr(person, "name", "Bob")
- print(person.name)
- delattr(person, "name")
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:
- class Car:
- def __init__(self, model):
- self.model = model
- self.speed = 0
-
- def accelerate(self):
- self.speed += 5
- return self.speed
-
- car = Car("Toyota")
-
- # 动态操作对象
- if hasattr(car, "accelerate"):
- method = getattr(car, "accelerate")
- print(method())
- print(method())
-
- # 动态设置属性
- setattr(car, "color", "red")
- print(car.color)
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).
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.
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:
- class Math:
- @staticmethod
- def add(a, b):
- return a + b
-
- print(Math.add(5, 3))
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:
- class Math:
- factor = 2
-
- @classmethod
- def multiply(cls, value):
- return cls.factor * value
-
- print(Math.multiply(5))
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!