Technologieaustausch

Entdecken Sie [Python Object-Oriented] Programming: Detaillierte Erklärung fortgeschrittener Programmierparadigmen in der neuen Ära

2024-07-12

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

Inhaltsverzeichnis

1. Objektorientierte Programmierkonzepte (OOP)

1.1 Was sind Klassen und Objekte?

1.2 Klassendefinition

1.3 Beziehung zwischen Klassen und Objekten

1.4 Xiao Lis Verständnis

2. Abstraktion

2.1 Abstrakte Konzepte

2.2 Abstrakte Klassen und Methoden

2.3 Xiao Lis Verständnis

3. Klassen und Instanzen

3.1 Klassendefinition und Instanziierung

3.2 Klassenattribute und -methoden

3.3 Xiao Lis Verständnis

4. Kapselung/Schnittstelle

4.1 Konzept der Kapselung

4.2 Schnittstellenkonzept

4.3 Xiao Lis Verständnis

5. Vererbung

5.1 Das Konzept der Vererbung

5.2 Umschreiben der Methode

5.3 Xiao Lis Verständnis

6. Polymorphismus

6.1 Das Konzept des Polymorphismus

6.2 Implementieren Sie Polymorphismus

6.3 Xiao Lis Verständnis

7. Selbstbeobachtung/Reflexion

7.1 Das Konzept der Selbstbeobachtung

7.2 Verwendung der Introspektion für dynamische Operationen

7.3 Xiao Lis Verständnis

8. Statische Methoden und Klassenmethoden

8.1 Statische Methoden

8.2 Klassenmethoden

Zusammenfassen


 

Kolumne: Notizen zur Python-Studie

Vorheriger Band: Python-Modularisierung und Paketverwaltung

1. Objektorientierte Programmierkonzepte (OOP)

Objektorientierte Programmierung (OOP) Ist ein Programmierparadigma, das durch die Organisation von Programmen in Objektsammlungen implementiert wird. Objekte enthalten nicht nur Daten, sondern auch Methoden zur Bearbeitung dieser Daten. Zu den Kernkonzepten von OOP gehören Klassen, Objekte, Eigenschaften und Methoden.

1.1 Was sind Klassen und Objekte?

  • Klasse Ist eine Vorlage oder Blaupause, die zum Erstellen von Objekten verwendet wird. Klassen definieren die Eigenschaften und das Verhalten von Objekten.
  • Objekt Ist eine Instanz der Klasse. Beim Erstellen eines Objekts wird eine bestimmte Instanz basierend auf der Klasse erstellt.

Beispiel:

  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 Klassendefinition

In Python werden Klassen übergeben class Schlüsselwortdefinition. Funktionen in einer Klasse werden Methoden und Variablen Eigenschaften genannt.Klassenmethoden beginnen normalerweise mitself Stellt als erster Parameter die Instanz selbst dar.

Beispiel:

  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 Beziehung zwischen Klassen und Objekten

Eine Klasse ist eine Vorlage für ein Objekt und definiert die Struktur und das Verhalten des Objekts. Objekte sind Instanzen von Klassen und jedes Objekt verfügt über unabhängige Eigenschaften und Methoden.

  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 Xiao Lis Verständnis

Eine Klasse ist wie eine Keksform, sie definiert die Form und Größe des Kekses. Objekte sind wie konkrete Kekse, die aus einer Form hergestellt werden. Jeder Keks kann unterschiedliche Geschmacksrichtungen (Eigenschaften) haben, aber seine Form und Größe (Struktur und Verhalten) sind gleich.

2. Abstraktion

abstrakt Es bezieht sich auf die Vereinfachung komplexer Probleme der realen Welt, indem die Hauptmerkmale erfasst und die Details ignoriert werden. Beim Programmieren hilft uns die Abstraktion dabei, prägnanteren und wartbareren Code zu erstellen.

2.1 Abstrakte Konzepte

Bei der Abstraktion geht es darum, die Hauptmerkmale eines Objekts zu extrahieren und dabei unwichtige Details zu ignorieren. Durch Abstraktion können wir uns auf die Kernfunktionalität eines Objekts konzentrieren, ohne von sekundären Merkmalen abgelenkt zu werden.

Beispiel:

  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 Abstrakte Klassen und Methoden

In Python können wir Abstraktion erreichen, indem wir abstrakte Klassen und abstrakte Methoden definieren. Abstrakte Klassen können nicht instanziiert, sondern nur geerbt werden. Abstrakte Methoden werden in der abstrakten Klasse definiert, aber in Unterklassen implementiert.

Beispiel:

  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 Xiao Lis Verständnis

Abstraktion ist wie die Reduzierung eines komplexen Gemäldes auf geometrische Formen. Beispielsweise hat eine bestimmte Katze viele Eigenschaften (Fellfarbe, Größe, Alter usw.), aber wir konzentrieren uns nur auf die Eigenschaft des Miauens. Dies ist die Abstraktion der Katze.

3. Klassen und Instanzen

Klassen und Instanzen Es ist die Grundlage von OOP. Klassen sind Vorlagen und Instanzen sind konkrete Objekte. Instanzen werden aus einer Klasse erstellt und verfügen über die von der Klasse definierten Eigenschaften und Methoden.

3.1 Klassendefinition und Instanziierung

Das Definieren einer Klasse und das Erstellen einer Instanz sind die Grundoperationen von OOP. Klassen definieren Eigenschaften und Methoden und Instanzen sind konkrete Objekte der Klasse.

Beispiel:

  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 Klassenattribute und -methoden

Die Attribute einer Klasse sind der Zustand des Objekts und die Methoden sind das Verhalten des Objekts.Klassenattribute bestehen__init__ Methodeninitialisierung, die Methode wird in der Klasse definiert.

Beispiel:

  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 Xiao Lis Verständnis

Klassen und Instanzen sind wie eine Zeichnung eines Hauses und eines tatsächlichen Hauses. Die Zeichnungen (Klassen) definieren die Struktur und Funktionalität des Hauses, während das eigentliche Haus (Instanz) das nach den Zeichnungen gebaute konkrete Objekt ist.

4. Kapselung/Schnittstelle

Verkapselung Es verbirgt den Status (Eigenschaften) und das Verhalten (Methoden) des Objekts innerhalb der Klasse und interagiert über die Schnittstelle (Methoden) mit der Außenwelt. Die Kapselung verbessert die Sicherheit und Wartbarkeit des Codes.

4.1 Konzept der Kapselung

Die Kapselung ist eines der Kernkonzepte von OOP. Sie schützt die Daten des Objekts, indem sie den internen Zustand des Objekts verbirgt und nur die notwendigen Schnittstellen offenlegt. Auf diese Weise kann externer Code nicht direkt auf den internen Status des Objekts zugreifen oder ihn ändern, sondern kann Daten nur über die vom Objekt bereitgestellten Methoden manipulieren.

Beispiel:

  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 Schnittstellenkonzept

Eine Schnittstelle ist die einzige Möglichkeit, wie ein Objekt mit der Außenwelt interagiert. Über Schnittstellen kann externer Code die Methoden des Objekts aufrufen, aber nicht direkt auf den internen Zustand des Objekts zugreifen.

Beispiel:

  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 Xiao Lis Verständnis

Die Verpackung ähnelt der Hülle eines Mobiltelefons. Die Schaltkreise und Komponenten (Zustand des Objekts) im Inneren des Mobiltelefons sind im Gehäuse gekapselt. Der Benutzer kann nur über die Tasten und den Bildschirm (Schnittstelle) mit dem Mobiltelefon interagieren, aber keinen direkten Kontakt zu den internen Komponenten herstellen.

5. Vererbung

erben Ist ein weiteres Kernkonzept von OOP, das es uns ermöglicht, eine neue Klasse basierend auf einer vorhandenen Klasse zu erstellen. Die neue Klasse erbt alle Eigenschaften und Methoden der vorhandenen Klasse.

5.1 Das Konzept der Vererbung

Von Vererbung spricht man, wenn eine Klasse (Unterklasse) Eigenschaften und Methoden von einer anderen Klasse (Elternklasse) erhält. Durch Vererbung können Unterklassen den Code der übergeordneten Klasse wiederverwenden, neue Eigenschaften und Methoden hinzufügen oder die Methoden der übergeordneten Klasse überschreiben.

Beispiel:

  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 Umschreiben der Methode

Eine Unterklasse kann die Methode der übergeordneten Klasse überschreiben, dh eine Methode mit demselben Namen wie die übergeordnete Klasse in der Unterklasse definieren, um unterschiedliche Funktionen zu erreichen.

Beispiel:

  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 Xiao Lis Verständnis

Eine Vererbung ist wie ein Vermächtnis, das Eltern ihren Kindern hinterlassen. Eltern (übergeordnete Klassen) geben ihre Eigenschaften (Eigenschaften und Methoden) an ihre untergeordneten Klassen (Unterklassen) weiter, und die untergeordneten Klassen können diese Eigenschaften nicht nur verwenden, sondern auch durch eigene Bemühungen (Hinzufügen neuer Eigenschaften und Methoden) reicher werden.

6. Polymorphismus

Polymorphismus Dies bedeutet, dass dieselbe Methode auf verschiedenen Objekten unterschiedliche Ausprägungen hat. Polymorphismus ermöglicht es uns, Methoden verschiedener Objekte über dieselbe Schnittstelle aufzurufen, um unterschiedliche Funktionen zu erreichen.

6.1 Das Konzept des Polymorphismus

Polymorphismus ist eines der wichtigen Merkmale von OOP. Er verweist auf Unterklassenobjekte durch Referenzen auf übergeordnete Klassen, sodass dieselbe Methode unterschiedliche Implementierungen haben kann. Polymorphismus erhöht die Flexibilität und Skalierbarkeit des Codes.

Beispiel:

  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 Implementieren Sie Polymorphismus

In Python wird Polymorphismus normalerweise durch Methodenüberschreibung und Verweise auf übergeordnete Klassen implementiert. Indem Sie über die übergeordnete Klassenreferenz auf das Unterklassenobjekt verweisen, können Sie die Unterklassenmethode aufrufen.

Beispiel:

  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 Xiao Lis Verständnis

Polymorphismus ist wie eine universelle Fernbedienung. Ob es sich um die Steuerung eines Fernsehers, einer Klimaanlage oder einer Stereoanlage handelt, solange diese Geräte über entsprechende Schnittstellen (Methoden) verfügen, kann die Fernbedienung (Referenz der übergeordneten Klasse) verschiedene Funktionen über dieselben Tasten (Methodenaufrufe) implementieren.

7. Selbstbeobachtung/Reflexion

Selbstbeobachtung Dies bedeutet, dass das Objekt zur Laufzeit seine eigenen Informationen kennen kann. Python bietet einige integrierte Funktionen zur Selbstbeobachtung, ztype()id()hasattr() Warten.

7.1 Das Konzept der Selbstbeobachtung

Selbstbeobachtung bedeutet, dass ein Objekt zur Laufzeit seine eigenen Informationen wie Eigenschaften, Methoden usw. erhalten kann. Introspektion macht Python-Programme äußerst dynamisch und flexibel.

Beispiel:

  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 Verwendung der Introspektion für dynamische Operationen

Durch Selbstbeobachtung können wir die Eigenschaften und Methoden von Objekten zur Laufzeit dynamisch manipulieren und so das Programm flexibler und dynamischer machen.

Beispiel:

  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 Xiao Lis Verständnis

Selbstprüfung ist wie ein Blick in den Spiegel. Durch den Spiegel (Introspektionsmechanismus) können Menschen sehen, wie sie aussehen (Eigenschaften und Methoden von Objekten) und bei Bedarf Anpassungen vornehmen (dynamische Manipulation von Objekten).

8. Statische Methoden und Klassenmethoden

statische Methode UndKlassenmethode sind Methoden, die der Klasse zugeordnet sind, nicht der Instanz.Verwendung statischer Methoden@staticmethod Dekorateur, Verwendung von Klassenmethoden@classmethod Dekorateur.

8.1 Statische Methoden

Eine statische Methode ist eine Methode einer Klasse, aber sie ist an keine Klasseninstanz gebunden. Statische Methoden können weder auf Instanzen einer Klasse zugreifen noch den Status der Klasse ändern. Sie werden normalerweise verwendet, um eine Operation auszuführen, die nichts mit der Klasse zu tun hat, aber logischerweise zur Funktionalität der Klasse gehört.

Beispiel:

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

 

8.2 Klassenmethoden

Klassenmethoden sind Methoden, die an die Klasse und nicht an die Instanz gebunden sind.Das erste Argument einer Klassenmethode ist die Klasse selbst, normalerweise benanntcls . Klassenmethoden können auf die Eigenschaften der Klasse und anderer Klassenmethoden zugreifen.

Beispiel:

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

Zusammenfassen

Alle Aspekte der objektorientierten Programmierung in Python, einschließlich grundlegender Konzepte der objektorientierten Programmierung, Abstraktionen, Klassen und Instanzen, Kapselung, Vererbung, Polymorphismus, Selbstbeobachtung sowie statische und Klassenmethoden.

Ich hoffe, dass dieser ausführliche Blog Ihnen dabei helfen kann, die objektorientierte Programmierung in Python tiefgreifend zu verstehen und dieses Wissen in tatsächlichen Projekten anzuwenden. Wenn Sie Fragen haben oder weitere Hilfe benötigen, können Sie mich gerne kontaktieren!