Condivisione della tecnologia

Esplora la programmazione [orientata agli oggetti Python]: spiegazione dettagliata dei paradigmi di programmazione avanzati nella nuova era

2024-07-12

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

Sommario

1. Concetti di programmazione orientata agli oggetti (OOP)

1.1 Cosa sono le classi e gli oggetti?

1.2 Definizione di classe

1.3 Relazione tra classi e oggetti

1.4 Comprensione di Xiao Li

2. Astrazione

2.1 Concetti astratti

2.2 Classi e metodi astratti

2.3 Comprensione di Xiao Li

3. Classi e istanze

3.1 Definizione e istanziazione delle classi

3.2 Attributi e metodi delle classi

3.3 Comprensione di Xiao Li

4. Incapsulamento/Interfaccia

4.1 Concetto di incapsulamento

4.2 Concetto di interfaccia

4.3 Comprensione di Xiao Li

5. Eredità

5.1 Il concetto di eredità

5.2 Riscrittura del metodo

5.3 Comprensione di Xiao Li

6. Polimorfismo

6.1 Il concetto di polimorfismo

6.2 Implementare il polimorfismo

6.3 Comprensione di Xiao Li

7. Introspezione/Riflessione

7.1 Il concetto di introspezione

7.2 Utilizzo dell'introspezione per operazioni dinamiche

7.3 Comprensione di Xiao Li

8. Metodi statici e metodi di classe

8.1 Metodi statici

8.2 Metodi di classe

Riassumere


 

Colonna: note di studio su Python

Volume precedente: Modularizzazione Python e gestione dei pacchetti

1. Concetti di programmazione orientata agli oggetti (OOP)

Programmazione orientata agli oggetti (OOP) È un paradigma di programmazione implementato organizzando i programmi in raccolte di oggetti. Gli oggetti contengono non solo dati ma anche metodi per manipolarli. I concetti fondamentali dell'OOP includono classi, oggetti, proprietà e metodi.

1.1 Cosa sono le classi e gli oggetti?

  • Classe È un modello o un progetto utilizzato per creare oggetti. Le classi definiscono le proprietà e il comportamento degli oggetti.
  • Oggetto È un'istanza della classe. Creare un oggetto significa creare un'istanza specifica in base alla classe.

esempio:

  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 Definizione di classe

In Python, le classi passano class Definizione delle parole chiave. Le funzioni di una classe sono chiamate metodi e le variabili sono chiamate proprietà.I metodi di classe di solito iniziano conself Come primo parametro, rappresenta l'istanza stessa.

esempio:

  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 Relazione tra classi e oggetti

Una classe è un modello per un oggetto e definisce la struttura e il comportamento dell'oggetto. Gli oggetti sono istanze di classi e ogni oggetto ha proprietà e metodi indipendenti.

  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 Comprensione di Xiao Li

Una classe è come uno stampo per biscotti, definisce la forma e la dimensione del biscotto. Gli oggetti sono come biscotti di cemento ricavati da uno stampo. Ogni biscotto può avere sapori (proprietà) diversi, ma la loro forma e dimensione (struttura e comportamento) sono le stesse.

2. Astrazione

astratto Si riferisce alla semplificazione di problemi complessi del mondo reale cogliendone le caratteristiche principali e ignorando i dettagli. Nella programmazione, l'astrazione ci aiuta a creare un codice più conciso e gestibile.

2.1 Concetti astratti

L'astrazione consiste nell'estrarre le caratteristiche principali di un oggetto ignorando i dettagli non importanti. Attraverso l'astrazione, possiamo concentrarci sulla funzionalità principale di un oggetto senza essere distratti dalle caratteristiche secondarie.

esempio:

  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 Classi e metodi astratti

In Python, possiamo ottenere l'astrazione definendo classi e metodi astratti. Le classi astratte non possono essere istanziate, ma solo ereditate. I metodi astratti sono definiti nella classe astratta ma implementati nelle sottoclassi.

esempio:

  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 Comprensione di Xiao Li

L'astrazione è come ridurre un dipinto complesso a forme geometriche. Ad esempio, un gatto specifico ha molte caratteristiche (colore del mantello, taglia, età, ecc.), ma ci concentreremo solo sulla caratteristica del miagolio. Questa è l'astrazione del gatto.

3. Classi e istanze

Classi e istanze È la base dell'OOP. Le classi sono modelli e le istanze sono oggetti concreti. Le istanze vengono create da una classe e hanno le proprietà e i metodi definiti dalla classe.

3.1 Definizione e istanziazione delle classi

La definizione di una classe e la creazione di un'istanza sono le operazioni di base dell'OOP. Le classi definiscono proprietà e metodi e le istanze sono oggetti concreti della classe.

esempio:

  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 Attributi e metodi delle classi

Gli attributi di una classe sono lo stato dell'oggetto e i metodi sono il comportamento dell'oggetto.Gli attributi della classe passano__init__ Inizializzazione del metodo, il metodo è definito nella classe.

esempio:

  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 Comprensione di Xiao Li

Le classi e le istanze sono come il disegno di una casa e di una casa reale. I disegni (classi) definiscono la struttura e la funzionalità della casa, mentre la casa vera e propria (istanza) è l'oggetto concreto costruito secondo i disegni.

4. Incapsulamento/Interfaccia

incapsulamento Nasconde lo stato (proprietà) e il comportamento (metodi) dell'oggetto all'interno della classe e interagisce con il mondo esterno attraverso l'interfaccia (metodi). L'incapsulamento migliora la sicurezza e la manutenibilità del codice.

4.1 Concetto di incapsulamento

L'incapsulamento è uno dei concetti fondamentali dell'OOP. Protegge i dati dell'oggetto nascondendo lo stato interno dell'oggetto ed esponendo solo le interfacce necessarie. In questo modo, il codice esterno non può accedere o modificare direttamente lo stato interno dell'oggetto e può solo manipolare i dati attraverso i metodi forniti dall'oggetto.

esempio:

  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 Concetto di interfaccia

Un'interfaccia è l'unico modo in cui un oggetto interagisce con il mondo esterno. Attraverso le interfacce, il codice esterno può chiamare i metodi dell'oggetto ma non può accedere direttamente allo stato interno dell'oggetto.

esempio:

  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 Comprensione di Xiao Li

La confezione è come la custodia di un telefono cellulare. I circuiti e i componenti (stato dell'oggetto) all'interno del telefono cellulare sono incapsulati nell'involucro. L'utente può interagire con il telefono cellulare solo attraverso i pulsanti e lo schermo (interfaccia), ma non può contattare direttamente i componenti interni.

5. Eredità

ereditare È un altro concetto fondamentale dell'OOP, che ci consente di creare una nuova classe basata su una classe esistente. La nuova classe eredita tutte le proprietà e i metodi della classe esistente.

5.1 Il concetto di eredità

L'ereditarietà avviene quando una classe (sottoclasse) ottiene proprietà e metodi da un'altra classe (classe genitore). Attraverso l'ereditarietà, le sottoclassi possono riutilizzare il codice della classe genitore, aggiungere nuove proprietà e metodi o sovrascrivere i metodi della classe genitore.

esempio:

  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 Riscrittura del metodo

Una sottoclasse può sovrascrivere il metodo della classe genitore, ovvero definire un metodo con lo stesso nome della classe genitore nella sottoclasse per ottenere funzioni diverse.

esempio:

  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 Comprensione di Xiao Li

L’eredità è come un lascito lasciato dai genitori ai propri figli. I genitori (classe genitore) trasmettono le loro proprietà (proprietà e metodi) ai figli (sottoclassi), e i figli non solo possono utilizzare queste proprietà, ma anche diventare più ricchi grazie ai propri sforzi (aggiungendo nuove proprietà e metodi).

6. Polimorfismo

Polimorfismo Significa che lo stesso metodo ha manifestazioni diverse su oggetti diversi. Il polimorfismo ci consente di chiamare metodi di oggetti diversi attraverso la stessa interfaccia per ottenere funzioni diverse.

6.1 Il concetto di polimorfismo

Il polimorfismo è una delle caratteristiche importanti dell'OOP. Punta a oggetti sottoclasse tramite riferimenti alla classe genitore, consentendo allo stesso metodo di avere implementazioni diverse. Il polimorfismo aumenta la flessibilità e la scalabilità del codice.

esempio:

  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 Implementare il polimorfismo

In Python, il polimorfismo viene solitamente implementato tramite l'override del metodo e i riferimenti alla classe genitore. Puntando all'oggetto sottoclasse tramite il riferimento alla classe genitore, è possibile chiamare il metodo della sottoclasse.

esempio:

  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 Comprensione di Xiao Li

Il polimorfismo è come un telecomando universale. Che si tratti di controllare una TV, un condizionatore d'aria o uno stereo, purché questi dispositivi dispongano di interfacce (metodi) corrispondenti, il telecomando (riferimento alla classe principale) può implementare diverse funzioni tramite gli stessi pulsanti (chiamate al metodo).

7. Introspezione/Riflessione

introspezione Ciò significa che l'oggetto può conoscere le proprie informazioni in fase di esecuzione. Python fornisce alcune funzioni integrate per l'introspezione, cometype()id()hasattr() Aspettare.

7.1 Il concetto di introspezione

L'introspezione significa che un oggetto può ottenere le proprie informazioni in fase di esecuzione, come proprietà, metodi, ecc. L'introspezione rende i programmi Python altamente dinamici e flessibili.

esempio:

  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 Utilizzo dell'introspezione per operazioni dinamiche

Attraverso l'introspezione, possiamo manipolare dinamicamente le proprietà e i metodi degli oggetti in fase di esecuzione, rendendo il programma più flessibile e dinamico.

esempio:

  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 Comprensione di Xiao Li

Auto-esaminarsi è come guardarsi allo specchio. Attraverso lo specchio (meccanismo di introspezione), le persone possono vedere il loro aspetto (proprietà e metodi degli oggetti) e apportare le modifiche necessarie (manipolazione dinamica degli oggetti).

8. Metodi statici e metodi di classe

metodo statico Emetodo di classe sono metodi associati alla classe, non all'istanza.Utilizzo del metodo statico@staticmethod Decoratore, utilizzo del metodo di classe@classmethod Decoratore.

8.1 Metodi statici

Un metodo statico è un metodo di una classe, ma non è legato ad alcuna istanza della classe. I metodi statici non possono accedere alle istanze di una classe, né possono modificare lo stato della classe. Di solito vengono utilizzati per eseguire operazioni che non hanno nulla a che fare con la classe, ma che logicamente appartengono alla funzionalità della classe.

esempio:

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

 

8.2 Metodi di classe

I metodi di classe sono metodi legati alla classe anziché all'istanza.Il primo argomento di un metodo di classe è la classe stessa, solitamente denominatacls . I metodi della classe possono accedere alle proprietà della classe e ad altri metodi della classe.

esempio:

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

Riassumere

Tutti gli aspetti della programmazione orientata agli oggetti in Python, inclusi i concetti di base della programmazione orientata agli oggetti, astrazioni, classi e istanze, incapsulamento, ereditarietà, polimorfismo, introspezione e metodi statici e di classe.

Spero che questo blog dettagliato possa aiutarti a comprendere a fondo la programmazione orientata agli oggetti in Python e ad applicare queste conoscenze a progetti reali. Se avete domande o avete bisogno di ulteriore assistenza, non esitate a contattarmi!