Objektorientierte Programmierung (OOP): Verstehen Sie die Schlüsselkonzepte von Klassen und Kapselung

Objekt

Was ist ein Objekt?

Ein Objekt ist ein Speicherbereich, der der Speicherung von Daten gewidmet ist. In Objekten können verschiedene Daten gespeichert werden, beispielsweise Zahlen, boolesche Werte und Codes. Das Objekt besteht aus drei Teilen:

  1. Die Kennung des Objekts (id)
  2. Art des Objekts (Typ)
  3. Der Wert des Objekts

Objektorientiert (OOP)

Python ist eine objektorientierte Programmiersprache. Die sogenannte objektorientierte Sprache versteht einfach, dass alle Operationen in der Sprache über Objekte ausgeführt werden.

prozedurale Programmiersprache

Prozessorientiert bezieht sich darauf, die Logik unseres Programms nacheinander in Schritte zu zerlegen und das Programm durch Abstrahieren jedes Schritts zu vervollständigen. Beispielsweise kann der Prozess des Schulbesuchs eines Kindes in mehrere Schritte unterteilt werden:

  1. Mama steht auf
  2. Mama geht auf die Toilette
  3. Mama wäscht
  4. Mama macht Frühstück
  5. Mutter weckt das Kind
  6. Kind geht zur Toilette
  7. Das Kind muss sich waschen
  8. Kinder essen
  9. Kind trägt Schultasche zur Schule

Die Idee der prozessorientierten Programmierung zerlegt eine Funktion in kleine Schritte und vervollständigt ein Programm, indem jeder kleine Schritt ausgeführt wird. Diese Programmiermethode ist relativ einfach und entspricht dem menschlichen Denken. Allerdings ist die Wiederverwendbarkeit gering und die Wartung schwierig.

objektorientierte Programmiersprache

Objektorientierte Programmiersprachen konzentrieren sich eher auf Objekte als auf Prozesse. Bei objektorientierten Sprachen ist alles ein Objekt. Beispielsweise wacht die Mutter des Kindes auf und ruft das Kind zur Schule.

Die objektorientierte Programmieridee speichert alle Funktionen einheitlich in entsprechenden Objekten. Um eine bestimmte Funktion zu verwenden, suchen Sie einfach direkt das entsprechende Objekt. Auf diese Weise geschriebener Code ist leicht zu lesen, leicht zu warten und leicht wiederzuverwenden. Allerdings ist diese Methode etwas umständlicher zu schreiben und entspricht nicht der herkömmlichen Denkweise.

Zusammenfassend umfasst das objektorientierte Programmierdenken hauptsächlich zwei Schritte:

  1. Einen Partner finden
  2. Beschäftige dich mit Objekten

Klasse

In Python können wir integrierte Objekte (wie int, float, str usw.) verwenden, um Objekte zu erstellen. Da es jedoch nicht alle Anforderungen erfüllen kann, müssen wir häufig einige Objekte anpassen. Einfach ausgedrückt entspricht eine Klasse einer Zeichnung. Wir müssen Objekte basierend auf Klassen im Programm erstellen. Manche Leute sagen auch, dass Objekte Instanzen von Klassen sind. Wenn mehrere Objekte durch eine Klasse erstellt werden, nennen wir diese Objekte eine Klasse von Objekten, genau wie Objekte wie int(), float(), bool(), str(), list(), dict() . Wenn Sie Ihre eigene Klasse definieren, müssen Sie mit einem Großbuchstaben beginnen und die Großschreibung (Pascal-Notation) verwenden, um die Klasse zu benennen.

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

mc = MyClass()

Der Prozess der Erstellung von Objekten mithilfe von Klassen

Verwenden Sie Klassen zum Erstellen von Objekten, genau wie beim Aufrufen einer Funktion. Der Ablauf ist wie folgt:

1. Erstellen Sie eine Variable

2. Erstellen Sie ein neues Objekt im Speicher

3. Weisen Sie der Variablen die ID des Objekts zu

Klassendefinition

Tatsächlich sind Klassen und Objekte Abstraktionen von Dingen im wirklichen Leben oder Inhalten in Programmen. Innerhalb des Codeblocks einer Klasse können wir Variablen und Funktionen definieren. Die Variable wird zu einer öffentlichen Eigenschaft der Klasseninstanz, und auf alle Instanzen der Klasse kann in Form des Namens „object.property“ zugegriffen werden. Die Funktion wird zu einer öffentlichen Methode der Klasseninstanz, und alle Instanzen der Klasse können die Methode in der Form object.methodname() aufrufen. Bei der Definition einer Methode muss mindestens ein formaler Parameter definiert werden. Wenn eine Methode aufgerufen wird, sucht der Parser zunächst im aktuellen Objekt nach der Eigenschaft oder Methode. Wenn nicht, sucht er im Klassenobjekt des aktuellen Objekts danach. Wenn immer noch kein Klassenobjekt vorhanden ist, wird ein Fehler gemeldet.

#定义一个简单的人类
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'

Code-Demo

#定义一个简单的类
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'

Initialisierungsmethoden und Instanzeigenschaften

In einer Klasse können wir eine spezielle Methode namens Initialisierungsmethode ( init ) definieren, die automatisch aufgerufen wird, wenn ein Objekt erstellt wird. Die Initialisierungsmethode kann Parameter akzeptieren und diese Parameter den Eigenschaften des Objekts zuweisen. Auf diese Weise können wir für jedes Objekt unterschiedliche Anfangswerte festlegen.

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

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

Im obigen Code definieren wir eine PersonKlasse, die zwei Instanzeigenschaften hat: nameund age. Die Initialisierungsmethode akzeptiert zwei Parameter und weist sie den Eigenschaften des Objekts zu. Durch das Erstellen von Objekten und das Aufrufen say_hellovon Methoden können wir auf diese Eigenschaften zugreifen und sie ändern.

Klasseneigenschaften und Klassenmethoden

Neben Instanzeigenschaften und Instanzmethoden können Klassen auch Klasseneigenschaften und Klassenmethoden besitzen.

Klassenattribute sind Attribute, die zur Klasse selbst und nicht zur Instanz gehören. Alle Instanzen dieser Klasse können auf Klasseneigenschaften zugreifen und diese ändern.

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访问类属性

Im obigen Code definieren wir ein countKlassenattribut, das die Anzahl der erstellten Instanzen aufzeichnet. Immer wenn eine Instanz erstellt wird, wird das Klassenattribut countdurch die Initialisierungsmethode um 1 erhöht. Durch Klassenmethoden get_count()können wir die Anzahl der bisher erstellten Instanzen ermitteln.

Vererbung und Polymorphismus

Klassen in Python unterstützen auch die Vererbung, wobei eine Klasse Eigenschaften und Methoden von einer anderen Klasse erben kann. Unterklassen können die Methoden der übergeordneten Klasse überschreiben, um polymorphe Effekte zu erzielen.

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}喵喵叫")

Im obigen Code haben wir eine AnimalKlasse definiert, die eine speakMethode hat. Dann haben wir die Klasse Dogund Catzwei Unterklassen definiert Animal. Unterklassen können Methoden von Elternklassen überschreiben, was eine Manifestation von Polymorphismus ist. Durch das Erstellen von Dogund Cat-Objekten können wir ihre jeweiligen speakMethoden aufrufen.

magische Methode

Neben der Initialisierungsmethode ( init ) gibt es in Python viele spezielle Methoden, auch Magic-Methoden genannt. Diese speziellen Methoden beginnen und enden mit einem doppelten Unterstrich und werden zu einem bestimmten Zeitpunkt automatisch aufgerufen.

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

Im obigen Code definieren wir zwei magische Methoden: __str__und __eq__.

  • __str__Methode zum Definieren einer Zeichenfolgendarstellung eines Objekts. Diese Methode wird automatisch aufgerufen und gibt eine Zeichenfolgendarstellung zurück, wenn die Funktion aufgerufen printoder verwendet wird.str()
  • __eq__Methoden werden verwendet, um die Gleichheit von Objekten zu definieren. Es akzeptiert ein anderes Objekt als Parameter und bestimmt anhand der benutzerdefinierten Logik, ob die beiden Objekte gleich sind.

Durch die Implementierung dieser magischen Methoden können wir das Verhalten unserer Objekte besser steuern und es unseren Erwartungen besser anpassen.

Zusammenfassung

In diesem Kapitel haben wir die grundlegenden Konzepte und Verwendung von Python-Klassen vorgestellt. Von Initialisierungsmethoden bis hin zu Instanzeigenschaften, Klasseneigenschaften, Klassenmethoden, Vererbung und Polymorphismus verfügen wir über ein schrittweises, detailliertes Verständnis der verschiedenen Funktionen und Verwendung von Klassen. Gleichzeitig lernten wir auch die Rolle und Verwendung magischer Methoden kennen, die zur Anpassung des Verhaltens der Klasse eingesetzt werden können.

Klassenkapselung

In der objektorientierten Programmierung ist die Kapselung ein wichtiges Konzept. Es bezieht sich auf die Kombination von Daten und Methoden in einer einzigen Einheit und das Verbergen spezifischer Implementierungsdetails nach außen.

Klassen in Python bieten einen Mechanismus zur Kapselung. Wir können Zugriffsmodifikatoren verwenden, um die Zugänglichkeit von Eigenschaften und Methoden zu steuern.

  • Öffentlicher Zugriffsmodifikator: Es wird kein Modifikator verwendet und alle Eigenschaften und Methoden sind standardmäßig öffentlich. Auf öffentliche Eigenschaften und Methoden kann sowohl innerhalb als auch außerhalb der Klasse zugegriffen werden.
  • Privater Zugriffsmodifikator: Verwenden Sie einen doppelten Unterstrich (__) als Präfix, um private Eigenschaften und Methoden zu definieren. Auf private Eigenschaften und Methoden kann nur innerhalb der Klasse und nicht direkt außerhalb der Klasse zugegriffen werden.
class Person:
    def __init__(self, name):
        self.__name = name  # 私有属性

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

    def greet(self):
        self.__say_hello()

Im obigen Code sind nameund say_hellobeide private Mitglieder. Private Eigenschaften und Methoden können mit einem doppelten Unterstrich als Präfix definiert werden. Innerhalb der Klasse können wir direkt auf diese privaten Mitglieder zugreifen. Außerhalb der Klasse kann nicht direkt auf private Mitglieder zugegriffen werden, aber indirekt über öffentliche Methoden.

Eigenschaftsaccessoren und Setter

Zusätzlich zum direkten Zugriff auf Eigenschaften können wir auch Eigenschaftszugriffsmethoden (Getter) und Eigenschaftssetzer (Setter) verwenden, um den Zugriff und die Änderung von Eigenschaften zu steuern.

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("姓名必须是字符串类型")

Im obigen Code haben wir @propertyeinen Eigenschaftsaccessor mithilfe eines Dekorators namens definiert name(). Durch den Zugriff obj.namekönnen wir __nameden Wert einer Privatimmobilie ermitteln. Dann verwenden wir @name.setterden Dekorator, um einen Eigenschaftssetzer zu definieren, der auch „ genannt wird name(). Durch Zuweisung obj.name = valuekönnen wir __nameden Wert eines Privateigentums ändern.

Dies hat den Vorteil, dass wir bei der externen Verwendung von Objekteigenschaften wie auf gewöhnliche Eigenschaften auf diese zugreifen können, ohne direkt auf private Eigenschaften zuzugreifen.

Zusammenfassung

In diesem Artikel haben wir die Kapselung und Attributzugriffskontrolle von Python-Klassen vorgestellt. Durch die Verwendung von Zugriffsmodifikatoren, privaten Eigenschaften und Methoden können wir die Implementierungsdetails einer Klasse verbergen und eine öffentliche Schnittstelle für die externe Verwendung bereitstellen. Wir haben auch gelernt, wie man Eigenschaften-Accessoren und -Setter verwendet, um den Zugriff auf und die Änderung von Eigenschaften zu steuern.

Zusammenfassen

In diesem Artikel werden einige wichtige Konzepte und Techniken der objektorientierten Programmierung vorgestellt, darunter Objekte, Klassen, Vererbung, Polymorphismus, magische Methoden usw. Durch die Verwendung von Klassen und Objekten können wir Daten und Methoden in einer einzigen Entität kombinieren, um eine Codekapselung und Wiederverwendung zu erreichen.

Bei prozeduralen Programmiersprachen liegt das Hauptaugenmerk auf den Abläufen und Funktionen des Programms. In objektorientierten Programmiersprachen zerlegen wir das Programm in Objekte, von denen jedes seine eigenen Daten und Methoden hat. Dieser Weg ist flexibler und einfacher zu verstehen.

Eine Klasse ist eine Vorlage für ein Objekt, und durch Definieren einer Klasse können mehrere Instanzobjekte erstellt werden. Klassen bestehen aus Attributen und Methoden, Attribute speichern die Daten des Objekts und Methoden definieren das Verhalten des Objekts.

Initialisierungsmethoden und Instanzeigenschaften werden verwendet, um den Status eines Objekts bei seiner Erstellung zu initialisieren. Klassenattribute sind Eigenschaften, die von allen Instanzen gemeinsam genutzt werden, und Klassenmethoden sind Methoden, die auf die gesamte Klasse und nicht auf eine einzelne Instanz wirken.

Vererbung und Polymorphismus sind zwei wichtige Konzepte in der objektorientierten Programmierung. Durch Vererbung können wir neue Klassen erstellen und Eigenschaften und Methoden von vorhandenen Klassen erben. Durch Polymorphismus können verschiedene Objekte dieselbe Methode unterschiedlich implementieren, wodurch die Flexibilität und Skalierbarkeit des Codes verbessert wird.

Magic-Methoden sind in Python speziell benannte Methoden, mit denen bestimmte Funktionen oder Verhaltensweisen implementiert werden, z. B. Initialisierung, Vergleich, Operatorüberladung usw.

Darüber hinaus werden in diesem Artikel auch die Klassenkapselung und die Attributzugriffskontrolle vorgestellt. Durch die Verwendung von Zugriffsmodifikatoren, privaten Eigenschaften und Methoden können Sie die Implementierungsdetails einer Klasse verbergen und eine öffentliche Schnittstelle für die externe Verwendung bereitstellen. Eigenschaften-Accessoren und -Setter können den Zugriff und die Änderung von Eigenschaften steuern und so die Sicherheit und Wartbarkeit des Codes erhöhen.

Alles in allem ist die objektorientierte Programmierung ein leistungsstarkes Programmierparadigma, das durch die Zerlegung von Programmen in Objekte Codemodularität, Wiederverwendung und Flexibilität erreichen kann. Beherrschen Sie Konzepte und Techniken wie Klassendefinition, Vererbung, Polymorphismus und magische Methoden und sind Sie in der Lage, strukturierteren und skalierbareren Code zu schreiben.

Empfohlene Python-Boutique-Kolumnen


Grundkenntnisse in Python (0 grundlegende Einführung)

[Python-Grundkenntnisse] 0.print()-Funktion
[Python-Grundkenntnisse] 1. Datentypen, Datenanwendungen, Datenkonvertierung
[Python-Grundkenntnisse] 2. Wenn bedingte Beurteilung und Bedingungsverschachtelung
[Python-Grundkenntnisse] 3.input() Funktionen
[Grundkenntnisse in Python] 4. Listen und Wörterbücher
[Grundkenntnisse in Python] 5. For-Schleifen und While-Schleifen
[Grundkenntnisse in Python] 6. Boolesche Werte und vier Arten von Anweisungen (break, continue, pass, else)
[Grundkenntnisse in Python] 7. Praktische Bedienung – Verwenden Sie Python, um das Spiel „Word PK“ zu implementieren (1)
[Python-Grundlagen] 7. Praktische Bedienung – Verwenden Sie Python, um das Spiel „Word PK“ zu implementieren (2)
[Python-Grundlagen] 8. Programmierdenken: So lösen Sie Probleme – Denkkapitel
[Grundkenntnisse in Python] 9. Definition und Aufruf von Funktionen
[Grundkenntnisse in Python] 10. Programme mit Funktionen schreiben – Praktisches Kapitel
[Grundkenntnisse in Python] 10. Verwendung von Python um das Stein-Schere-Papier-Spiel zu implementieren - Funktionsübungs-Operations-Kapitel
[Python-Grundlagen] 11. So debuggen Sie - Häufige Fehlerursachen und Ideen zur Fehlerbehebung - Denkkapitel
[Python-Grundlagen] 12. Klassen und Objekte (1)
[Python-Grundlagen] 12 . Klassen und Objekte (2)
[Python-Grundlagen] Wissen] 13. Klassen und Objekte (3)
[Grundkenntnisse über Python] 13. Klassen und Objekte (4)
[Grundkenntnisse über Python] 14. Aufbau eines Bibliotheksverwaltungssystems (praktisch). Betrieb von Klassen und Objekten)
[Grundkenntnisse in Python] 15. Grundkenntnisse im Programmieren
[Grundkenntnisse von Python] 16. Grundlagen des Lesens und Schreibens von Dateien sowie von Operationen
[Grundkenntnisse von Python] 16. Python-Implementierung von „Fragen zum Diktieren alter Gedichte“ (Lesen, Schreiben und Codieren von Dateien – praktischer Betrieb)
[Grundkenntnisse von Python] 17. Das Modulkonzept und die Einführung
[Python-Grundlagen] 18. Praktische Bedienung – Verwendung von Python zum automatischen Versenden von Massen-E-Mails
[Python-Grundlagen] 19. Produktdenken und Verwendung von Flussdiagrammen – Denken
[Python-Grundlagen] 20. Python-Implementierung „Was man zum Mittagessen essen soll“ (Produktdenken – Praktische Bedienung)
[Grundkenntnisse in Python] 21. Der richtige Weg, effizient und langsam zu öffnen – Abschluss
[Python-Dateiverarbeitung] Lesen, Verarbeiten und Schreiben von CSV-Dateien
[Python-Dateiverarbeitung ] Automatische Excel-Verarbeitung (mit openpyxl)
[Python-Dateiverarbeitung] - Excel-Formatverarbeitung


Python-Crawler-Kenntnisse

[Python-Crawler] 1. Grundkenntnisse über Crawler
[Python-Crawler] 2. Grundkenntnisse über Webseiten
[Python-Crawler] 3. Erste Erfahrungen mit Crawlern (BeautifulSoup-Analyse)
[Python-Crawler] 4. Praktischer Crawler-Betrieb (Dish-Crawling)
[Python Crawler] 5. Praktischer Crawler-Betrieb (Crawling-Texte)
[Python-Crawler] 6. Praktischer Crawler-Betrieb (Daten mit Parametern anfordern)
[Python-Crawler] 7. Wo werden die gecrawlten Daten gespeichert? [Python - Crawler] 8. Sehen Sie sich die Vergangenheit an
und lernen Sie das Neue kennen Melden Sie sich rechtzeitig bei Ihnen [Python-Crawler] 12. Bauen Sie Ihre Crawler-Armee auf [Python-Crawler] 13. Was Sie essen können, ohne dick zu werden (praktische Crawler-Übung) [Python-Crawler] 14. Erklärung des Scrapy-Frameworks [Python-Crawler] 15. Praxis des Scrapy-Frameworks (Beliebter Job-Crawler Take) [Python-Crawler] 16. Zusammenfassung und Überprüfung der Crawler-Wissenspunkte







Guess you like

Origin blog.csdn.net/qq_41308872/article/details/132848250