Objektorientiert - mittel

1. Spezielle Methoden

  • In der Klasse können einige spezielle Methoden definiert werden
    • Drei Punkte, die garantiert werden müssen, um eine spezielle Methode abzuschließen
      • 1. In der Klasse ist der Name für mich und unser Programm erforderlich
      • 2. Die Namen sind jedoch alle unterschiedlich
      • 3. Fügen Sie nach dem Festlegen des Namens das Attribut manuell hinzu und vergessen Sie es
  • Spezielle Methodenform
    • Grammatik:
__名称__()

Diese Methode ist eine spezielle Methode, die auch als magische Methode bezeichnet wird.

  • Die spezielle Methode muss nicht von uns aufgerufen werden, die spezielle Methode wird zu einem bestimmten Zeitpunkt automatisch aufgerufen.
  • Demonstrationsbeispiele für spezielle Methoden:
    1. Gewöhnliche Klassen:
class Person:
    # 在类的内部创建一个方法(speak是方法名)
    def speak(self):
        print('你好我是%s' % self.name)


# 创建对象(实例)
p1 = Person()
p1.name = '刘德华'
p2 = Person()
p2.name = '张家辉'
p1.speak()
p2.speak()

Ergebnis der Druckausgabe:

你好我是刘德华
你好我是张家辉

2. Spezielle Methodenklasse:

class Person:
    # 类属性:
    # name = '向华强'
    def __init__(self,name): # 新建init方法 # self就是实例(对象),通过类似函数穿参的模式,将name传入实参
        self.name = name

    # print('类中的print') # 通过总结2可知,本行代码如果运行,将是最先运行的代码。
    def speak(self): # 新建speak方法
        print('大家好,我是%s' % self.name)


p1 = Person('刘德华') # 本行代码中的刘德华,就像函数穿参的中的实参。通过函数函数穿参的模式,传递给33行代码中的name,函数再继续向下执行,通过38行代码进行拼接,打印输出。
# 调用init方法
# p1.__init__() # 通过总结1可知本行代码属于二次调用,非需要时,不写。
p2 = Person('郭富城')
p3 = Person('何润东')
p1.speak()
p2.speak()
p3.speak()

Ergebnis der Druckausgabe:

大家好,我是刘德华
大家好,我是郭富城
大家好,我是何润东

um zusammenzufassen:

  • 1. Jedes Mal, wenn ein Instanzobjekt erstellt wird, ruft der Interpreter-Python die init magic-Methode einmal auf.
  • 2. Unter den objektorientierten Funktionen ist die Klasse die größte, und die Ausführungsreihenfolge wird ebenfalls zuerst ausgeführt.

Zweitens die Einführung der Verpackung

  • Grundlegende Konzepte der Kapselung
    • Die Kapselung ist eines der drei Merkmale der objektorientierten Kapselung.
    • Gründe für die Verpackung:
      • 1. Attribute können nicht nach Belieben geändert werden
      • 2. Das Attribut kann nicht in einen Wert geändert werden
    • Kapselung bezieht sich auf die verborgenen Eigenschaften und Methoden von Objekten, auf die von außen nicht zugegriffen werden kann.
    • Wir können eine getter () -Methode und eine setter () -Methode bereitstellen, die von außen auf die gekapselten Eigenschaften zugreifen können.
      • Die Methode getter () wird verwendet, um die angegebenen Attribute im Objekt abzurufen
      • Mit der Methode setter () werden die angegebenen Eigenschaften des Objekts festgelegt
    • Die Idee der Einkapselung:
      • 1. Wir brauchen einen Weg, um die Datensicherheit zu verbessern.
      • 2. Die Attribute können nicht nach Belieben geändert werden. (Es kann nur geändert werden, wenn Änderungen zulässig sind.)
      • 3. Das Attribut kann kein Wert sein.
    • Sie können mit einem doppelten Unterstrich für die Eigenschaften des Objekts beginnen __xxx. Das Attribut, das mit dem doppelten Unterstrich beginnt, ist das versteckte Attribut des Objekts. Auf das versteckte Attribut kann nur innerhalb der Klasse zugegriffen werden, nicht über das Objekt.
    • Tatsächlich ist das versteckte Attribut nur, dass Python automatisch einen Namen für das Attribut geändert hat - _累名__属性名zum Beispiel __name ——>_Person__name(auf diese Methode kann weiterhin extern zugegriffen werden, aber wir verwenden diese Methode im Allgemeinen nicht. Im Allgemeinen werden einige private Attribute mit einem einzelnen Unterstrich gestartet )
    • Im Allgemeinen werden die Attribute, die mit einem einzelnen Unterstrich beginnen, alle privat implementiert. Ändern Sie die privaten Attribute unter besonderen Umständen nicht.
      Eine einfache Demonstration von Verkapselungsideen:
class Car:
    def __init__(self, name, color):
        self.name = name
        self.color = color

    def run(self):
        print('汽车开始跑了')

    def horn(self):
        print('BIBIBIBIKBI')


car = Car('法拉利','红色')
# print(car.name, car.color)
car.name = '小猫咪'
print(car.name,car.color)
car.run()
car.horn()

Ergebnis der Druckausgabe:

汽车开始跑了
BIBIBIBIKBI

Analyse: Der obige Code sollte die
rote Katze ausgeben und das
Auto sollte
BIBIBIBIKBI ausführen

Wenn das der Autoinstanz hinzugefügte Attribut jedoch ein Kätzchen ist, überschreibt dieses gefälschte Attribut des Kätzchens Ferrari.
Dies stört diese Art von Code. Verursacht einen Fehler.

Drei, Verpackung

  • Die Einkapselung ist eigentlich ein relativer Einkapselungseffekt. (Das sogenannte alte Sprichwort: Wache gegen den Herrn, aber nicht gegen den Bösewicht)
  • Beispiel für eine Paketdemonstration:

1. Ein relativ niedriges Paket

class Dog:
    def __init__(self, name):
        self.hidden_name = name


dog = Dog('哈士奇')
# print(dog.hidden_name)
dog.name = '田园犬'
print(dog.hidden_name)

Ergebnis der Druckausgabe:
Husky-
Analyse: Es ist zu einfach, diese Methode zu verwenden. Kapseln Sie einfach den Husky ein. Das Attribut des Gartenhundes hat keinen Einfluss auf das Attribut des Husky.

2. Demonstration von Verpackungsbeispielen:

class Dog:
    def __init__(self, name):
        self.hidden_name = name

    # getter()--查看属性方法:(可读)
    def getter_name(self):
        print('用户调用了此读取方法')
        return self.hidden_name

    # setter()--修改属性方法:(可写)
    def setter_name(self, name):
        print('用户调用了此修改方法')
        self.hidden_name = name

dog = Dog('哈士奇')
dog.setter_name('田园犬')
print(dog.getter_name())

Ergebnis der Druckausgabe:

用户调用了此修改方法
用户调用了此读取方法
田园犬

Analyse: Zunächst werden die Lesemethode und die Änderungsmethode im Code definiert, was beweist, dass die Kapselungseigenschaften im Code geändert werden können.
Zusammenfassung: Die Kapselung erhöht zwar die Verantwortung für Klassendefinitionen, gewährleistet aber auch die Datensicherheit.

  • 1. Blenden Sie den Attributnamen aus, damit der Aufrufer die Attribute im Objekt nicht nach Belieben ändern kann.
  • 2. Die Methode getter () und die Methode setter () werden hinzugefügt, um zu steuern, ob die Eigenschaft schreibgeschützt ist.
  • 3. Verwenden Sie die setter () -Methode, um die Eigenschaft festzulegen. Sie können eine weitere Datenüberprüfung durchführen.
  • 4. Verwenden Sie die Methode getter (), um die Eigenschaften abzurufen. Verwenden Sie die Methode setter (), um die Eigenschaften festzulegen. Sie können die Eigenschaften lesen und die Eigenschaften ändern, während Sie eine andere Verarbeitung durchführen.

3. Verpackung im wahrsten Sinne des Wortes

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

    # getter()--查看属性方法:(可读)
    def getter_name(self):
        print('用户调用了此读取方法')
        return self._name

    # setter()--修改属性方法:(可写)
    def setter_name(self, name):
        print('用户调用了此修改方法')
        self._name = name


p1 = Person('陈慧翎')
p1.setter_name('周慧敏')
# print(p1._name) # 未调用get方法禁止查看属性
# p1.name = '黄一琳'
# print(p1.name)
print(p1.getter_name())

Ergebnis der Druckausgabe:

Der Benutzer hat diese Änderungsmethode aufgerufen. Der
Benutzer hat diese Lesemethode
Zhou Huimin genannt

Zusammenfassung:
__name bedeutet, dass das Ändern dieses Attributs verboten ist (entspricht dem Hinzufügen einer Ebene).

Vier, Immobiliendekorateur

  • Immobiliendekorateur
  • Wir können den @property-Dekorator anpassen, um schreibgeschützte Eigenschaften zu erstellen. Der @property-Dekorator konvertiert die Methode in eine schreibgeschützte Eigenschaft mit demselben Namen, die in Verbindung mit der definierten Eigenschaft verwendet werden kann, um zu verhindern, dass die Eigenschaft geändert wird.
    Demo-Beispiel:
class Person:
    def __init__(self, name):
        self._name = name

    @property # 设置只读属性(与getter方法类似)
    def name(self):
        print('getter方法执行了')
        return self._name

    @name.setter # 代表setter方法
    def name(self, name):
        print('setter方法执行了')
        self._name = name


p1 = Person('周慧敏')
p1.name = '黄一琳'
print(p1.name)

Druckausgabeergebnis:
Setter-Methode ausgeführt
Getter-Methode ausgeführt
Huang Yilin

Zusammenfassung: Legen Sie zuerst die schreibgeschützte Eigenschaft über den Dekorator und dann den Setter so fest, dass die Eigenschaft über den Dekorator geändert wird. Sie können anderen Kollegen mitteilen, dass dies ein gekapselter Parameter ist. Wenn Sie ihn ändern müssen, ändern Sie ihn bitte ordnungsgemäß.

Fünf, PEP8-Code-Schreibspezifikationen

  • Verwenden Sie 4 Leerzeichen zum Einrücken. Leerzeichen sind die bevorzugte Einrückungsmethode. Python3 erlaubt nicht das Mischen von Tabulatoren und Leerzeichen zum Einrücken.
  • Die maximale Länge jeder Zeile ist auf 79 Zeichen begrenzt.
  • Definition von Funktionen und Klassen der obersten Ebene. Verwenden Sie zwei Leerzeilen, um die Vorder- und Rückseite zu trennen.
  • importieren
    • Es wird beispielsweise empfohlen, in verschiedenen Zeilen zu importieren
import os
omport sys

Es kann auch so sein:

from subprocess import Popen, PIPE
  • Das Importpaket befindet sich oben in der Datei. Nach dem Modulkommentar, der Dokumentzeichenfolge und vor den globalen Variablen und Konstanten werden die Importe in der folgenden Reihenfolge gruppiert:
    Standardbibliotheksimport
    Zugehöriger Bibliotheksimport von Drittanbietern
    Lokaler Anwendungs- / Bibliotheksimport
    Fügen Sie zwischen jeder Importgruppe eine Leerzeile ein
  • Die doppelten Anführungszeichen und einfachen Anführungszeichen, die bei der Definition von Zeichenfolgen in Python verwendet werden, sind identisch. Versuchen Sie, die Zeichenfolge auf dieselbe Weise zu definieren. Wenn ein Zeichenfolgenpaket einfache Anführungszeichen oder doppelte Anführungszeichen enthält, verwenden Sie unterschiedliche Symbole in der äußeren Ebene, um die Verwendung von Backslashes zu vermeiden Übersetzung von Balken zur Verbesserung der Lesbarkeit.
  • Wild ist ein Leerzeichen in einem Satz:
    1. Vermeiden Sie Klammern, eckige Klammern und geschweifte Klammern, gefolgt von Leerzeichen.
    2. Vermeiden Sie Leerzeichen, Semikolons und Doppelpunkte.
    3. Der Doppelpunkt ähnelt einem binären Operator im Slice. Auf beiden Seiten muss die gleiche Anzahl von Leerzeichen vorhanden sein. Wenn ein Slice-Parameter weggelassen wird, werden auch die Leerzeichen weggelassen.
    4. Fügen Sie dem Zuweisungsoperator nicht mehrere Leerzeichen hinzu, um sie an einer anderen Zuweisungsanweisung auszurichten.
    5. Vermeiden Sie das Hinzufügen von Leerzeichen am Ende des Ausdrucks, da das Leerzeichen am Ende des Ausdrucks normalerweise unsichtbar ist und Verwirrung stiftet.
    6. Fügen Sie immer ein Leerzeichen auf beiden Seiten des Binäroperators hinzu, Zuordnung (=), inkrementelle Zuweisung (+ =, - =), Vergleich (==, <,> ,! =, <>, <=,> = , in, not, in, is.is not), Boolean (und versehentlich nicht)
    7. Vermeiden Sie es, kleinen Code in dieselbe Zeile wie if / for / while zu setzen, und vermeiden Sie zu langen Code.
 1 if foo == 'blah': do_blah_thing()
 2 for x in lst: total += x
 3 while t < 10: t = delay()
  • Verwenden Sie niemals die Buchstaben 'l' (L), o (O) oder Großbuchstaben I als Zeichenfolgenvariablen. In einigen Schriftarten können diese Zeichen nicht von den Zahlen 0 und 1 unterschieden werden.
  • Müde Namen verwenden im Allgemeinen die Konvention der Anfangsbuchstaben.
  • Funktionsnamen sollten in Kleinbuchstaben geschrieben werden. Wenn Sie die Lesbarkeit verbessern möchten, können Sie Unterstriche verwenden
  • Wenn der Parametername einer Funktion mit einem vorhandenen Schlüsselwort in Konflikt steht, ist das Hinzufügen eines einzelnen Unterstrichs danach besser als Abkürzung oder zufällige Schreibweise.
  • Methodennamen und Instanzvariablen verwenden durch Unterstriche getrennte Kleinbuchstaben, um die Lesbarkeit zu verbessern.

Supongo que te gusta

Origin blog.csdn.net/Rhymeplot__JDQS/article/details/109132569
Recomendado
Clasificación