Einführung und grundlegende Verwendung von Python-Klassen und Objektinstanzen

Grundkonzepte der objektorientierten Technologie

  • Klasse: wird verwendet, um eine Sammlung von Objekten mit denselben Eigenschaften und Methoden zu beschreiben. Es definiert die Eigenschaften und Methoden, die jedem Objekt in der Sammlung gemeinsam sind. Objekte sind Instanzen von Klassen. Einfach ausgedrückt ist eine Klasse eine Vorlage und eine Instanz ein Objekt, das auf der Grundlage der Klasse erstellt wird

  • **Klassenvariablen:** Klassenvariablen sind im gesamten instanziierten Objekt öffentlich. Klassenvariablen werden in der Klasse und außerhalb des Funktionskörpers definiert. Klassenvariablen werden im Allgemeinen nicht als Instanzvariablen verwendet.

  • **Instanzvariablen:** In Methoden definierte Variablen wirken sich nur auf die Klasse der aktuellen Instanz aus.

  • **Datenmitglieder:** Klassenvariablen oder Instanzvariablen werden verwendet, um Daten zu verarbeiten, die sich auf die Klasse und ihre Instanzobjekte beziehen.

  • **Methode: **In der Klasse definierte Funktion.

  • **Instantiierung:** Erstellen Sie eine Instanz einer Klasse, ein bestimmtes Objekt der Klasse.

  • **Objekt:** Eine Instanz einer durch eine Klasse definierten Datenstruktur. Zu den Objekten gehören zwei Datenelemente (Klassenvariablen und Instanzvariablen) und Methoden.

  • Kapselung : Fügen Sie mehrere Methoden oder Eigenschaften in eine private Klasse ein, und andere Objekte greifen nicht auf diese private Klasse zu.

  • **Vererbung:** Eine abgeleitete Klasse erbt die Felder und Methoden einer Basisklasse.

    Durch Vererbung kann ein Objekt einer abgeleiteten Klasse als Basisklassenobjekt behandelt werden. Es gibt zum Beispiel ein solches Design: Ein Objekt vom Typ Dog wird von der Animal-Klasse abgeleitet, also ist Dog auch ein Animal.

  • **Umschreiben der Methode:** Wenn die von der übergeordneten Klasse geerbte Methode die Anforderungen der Unterklasse nicht erfüllen kann, kann sie neu geschrieben werden. Dieser Vorgang wird als Methodenüberschreibung oder Methodenumschreiben bezeichnet.

  • Polymorphismus : Verschiedene Objekte, die dieselbe Methode derselben Klasse aufrufen, zeigen unterschiedliche Formen.

Vererbung, Kapselung und Polymorphismus sind die drei Hauptmerkmale der Objektorientierung. Klassen können die drei Hauptmerkmale der Objektorientierung realisieren.

Im Vergleich zu anderen Programmiersprachen fügt Python so weit wie möglich Klassenmechanismen hinzu, ohne neue Syntax und Semantik hinzuzufügen.


Objekte in Python

  • Objekte stellen eines der grundlegendsten Konzepte in Python dar. In Python kann alles ein Objekt sein.

    Python behandelt alle Daten als Objekte und Zuweisungsanweisungen erstellen Objekte und Variablen im Speicher.

  • Objekte haben drei grundlegende Attribute: Typ, Identität und Wert

    print(type(500))	# 输出:<class 'int'>		# 对象的类型
    print(id(500))		# 输出:2556827724176		# 对象的身份标识
    print(500)			# 输出:500				# 对象的值
    

Klassendefinition

Kurze Beschreibung

Obwohl jede Variable in Python als Objekt bezeichnet werden kann, stellt das eigentliche Objekt eine spezifische Instanziierung von Klassenattributen und -methoden dar. Nur durch die Verwendung von Klassen können Sie ein echtes Objekt erstellen.

In Python werden Klassen über das Schlüsselwort class definiert , und die allgemeine Konvention für Klassennamen besteht darin, den ersten Buchstaben groß zu schreiben.

  • Definieren Sie das Grundformat einer Klasse:

    class 类名(父类):
       pass  # 此处可添加属性和方法
    
    class 类名:
       pass  # 此处可添加属性和方法
    

Notiz:

  • Standardmäßig erben alle Klassen in Python3 implizit die Objektklasse. Daher wird in Python3 empfohlen, die Objektklasse nicht explizit zu erben.

  • Innere Klassen in Python: Die inneren Klassen von Python können nicht nur in Klassen, sondern auch in Methoden definiert werden


Klassenattribute

In zwei Typen unterteilt : Klassenattribute und Instanzattribute :

  • Klassenattribute : An die Klasse gebundene Attribute. Es gibt nur eine Kopie . Es handelt sich um ein gemeinsames Attribut, auf das jede Instanz zugreifen kann.

    • Klassenattribute können direkt über die Klasse oder über ein instanziiertes Objekt der Klasse aufgerufen werden, ähnlich wie statische Konstanten in Java

    • Hinweis: Wenn Sie den Wert eines Klassenattributs über das Instanziierungsobjekt der Klasse in Python ändern, wird der Wert der Klassenvariablen nicht geändert!

      Denn durch das Ändern der Attribute einer Klasse über eine Instanz wird tatsächlich ein Instanzattribut für die Instanz mit demselben Namen wie das Klassenattribut erstellt und dann das Instanzattribut geändert . Die Zugriffspriorität des Instanzattributs ist höher als die des Klassenattributs , also des Instanzattributs Beim Zugriff wird zuerst darauf zugegriffen, wodurch der Zugriff auf Klassenattribute blockiert wird

      class Person:
          name = 'aaa';
      
      person = Person()
      print(person.name)		# 输出:aaa
      
      person.name = "bbb"
      print(person.name)		# 输出:bbb
      print(Person.name)		# 输出:aaa
      
      del person.name			# 可以使用 del 删除与类属性同名的实例属性
      print(person.name)		# 输出:aaa
      
  • Instanzattribute : Jede Instanz hat ihre eigenen und ist unabhängig voneinander

    Auf Instanzeigenschaften zugreifen:

    • Übergeben Sie innerhalb der Instanzmethode „self.property name“
    • Greifen Sie außerhalb der Klasse indirekt durch den Aufruf von Instanzmethoden zu

    **Private Instanzeigenschaften:** Der Eigenschaftsname beginnt mit einem Unterstrich ( _private_attrs), der angibt, dass die Eigenschaft als privat deklariert ist und außerhalb der Klasse nicht verwendet oder direkt darauf zugegriffen werden kann. Die Verwendung in einer Methode innerhalb einer Klasse ist wie folgt:self._private_attrs


Klassenmethoden

Verwenden Sie innerhalb einer Klasse das Schlüsselwort def, um Funktionen zu definieren. In einer Klasse definierte Funktionen werden auch Methoden genannt.

  • Klassenmethoden :

    In Python ist eine Klassenmethode eine vom Dekorator @classmethod dekorierte Methode , die angibt, dass es sich um eine Klassenmethode handelt

    Der erste Parameter der Klassenmethode ist cls , der die Klasse selbst darstellt. Dadurch können Klassenmethoden auf Klasseneigenschaften und andere Klassenmethoden zugreifen und diese ändern.

    Klassenmethoden können direkt über die Klasse oder über ein instanziiertes Objekt der Klasse aufgerufen werden (nicht empfohlen).

    Unterklassenvererbung: Unterklassen können Klassenmethoden der übergeordneten Klasse erben und überschreiben.

  • Instanzmethode :

    Im Gegensatz zu allgemeinen Funktionsdefinitionen muss der erste formale Parameter einer Instanzmethode self sein. Die Bedeutung von self bezieht sich hier auf das instanziierte Objekt.

    Hinweis: „self“ ist in Python kein Schlüsselwort, daher kann der erste formale Parameter der Instanzmethode tatsächlich mit einem anderen Namen benannt werden, in der Industrie wird er jedoch „self“ genannt.

    Instanzmethode aufrufen:

    • Übergeben Sie innerhalb der Instanzmethode „self.methodname()“
    • Übergeben Sie außerhalb der Klasse „Objektname.Instanzmethodenname (außer Selbstparameter)“
  • Statische Methode:

    Dekorator: Statische Methoden werden mit dem @staticmethod- Dekorator definiert .

    Parameter: Statische Methoden haben keine speziellen Parameter und erfordern keinen Verweis auf die Klasse selbst oder eine Instanz. Sie ähneln gewöhnlichen Funktionen.

    Auf Klasseneigenschaften und -methoden kann nicht zugegriffen werden: Statische Methoden können nicht direkt auf Klasseneigenschaften und -methoden zugreifen, da sie keine Klasse oder Instanz als Parameter übergeben.

    Eine Instanziierung des Objekts ist nicht erforderlich: Statische Methoden können von der Klasse selbst aufgerufen werden, ohne das Objekt zu instanziieren. Zum Beispiel MyClass.my_static_method()

    Keine Vererbung durch Unterklassen: Statische Methoden werden nicht von Unterklassen geerbt, da sie nicht mit der Klasse oder Instanz verknüpft sind.

    Häufige Szenarien: Statische Methoden werden normalerweise für Vorgänge verwendet, die sich auf die Klasse, aber nicht auf eine bestimmte Instanz beziehen, wie z. B. Dienstprogrammfunktionen oder Hilfsfunktionen.

  • Private Methode :

    Eine Methode, die mit zwei Unterstrichen ( __private_method) beginnt, zeigt an, dass die Methode als private Methode deklariert ist und nicht außerhalb der Klasse aufgerufen werden kann.

    Die aufrufende Methode innerhalb der Klasse ist:slef.__private_methods


Sonderfunktionen der Klasse

Es gibt hauptsächlich folgende Typen:

  • __init__(Initialisierungsfunktion): Wird automatisch aufgerufen, wenn eine Klasse aufgerufen wird, um ein Objekt zu erstellen und die Initialisierung des Objekts abzuschließen.

    Die Initialisierungsfunktion in Python unterstützt keine Methodenüberladung. Es gibt nur eine

    In Python **mapkann die Initialisierungsfunktion als flexible Mehrparameterübertragung definiert werden

    class TestClassA:
         def __init__(self, a, b):
             print("我是python的构造方法");
    
    class TestClassB:
        #定义灵活的可传递任何数据的构造方法
        def __init__(self, **map):
            print("我是python的构造方法" + map.get("name"));
            print("我是python的构造方法" + map.get("age"));
    

    Erweiterung: __init__Die Verwendung der Methode ähnelt der Konstruktormethode in Java, es handelt sich jedoch nicht um eine Konstruktormethode. Die Methode zum Erstellen einer Instanz in Python ist . __new__Diese Methode wird in Python meist standardmäßig verwendet und muss im Allgemeinen nicht verwendet werden neu definiert.

  • __del__(Destruktor): Wird automatisch aufgerufen, wenn das Objekt recycelt wird

    Sowohl der Konstruktor als auch der Destruktor müssen beim Definieren der Klasse nicht geschrieben werden.


Klassenvererbung

  • Einzelvererbung

    Grammatik:

    class <类名>(父类名)
    	<语句>
    

    Beispiel:

    class Student(people):
            grade = ''
            def __init__(self,n,a,w,g):
                #调用父类的构函
                people.__init__(self,n,a,w)
                self.grade = g
            #覆写父类的方法
            def speak(self):
                print("%s is speaking: I am %d years old,and I am in grade %d"%(self.name,self.age,self.grade))
    
        s = Student('ken',20,60,3)
        s.speak()
    
  • Mehrfachvererbung von Klassen

    Grammatik:

    class 类名(父类1, 父类2, ...., 父类n)
    	<语句1>
    

    Hinweis: Die Reihenfolge der übergeordneten Klassen ist in Klammern angegeben. Wenn in der übergeordneten Klasse derselbe Methodenname vorhanden ist, dieser jedoch bei der Verwendung in der Unterklasse nicht angegeben wird, sucht Python von links nach rechts, d. h. wenn die Methode in der Unterklasse nicht gefunden wird, wird von links nach rechts gesucht um zu sehen, ob die Methode in der übergeordneten Klasse enthalten ist .

Ich denke du magst

Origin blog.csdn.net/footless_bird/article/details/133251787
Empfohlen
Rangfolge