Python-Grundgrammatik (Verschiedenes) Memo (4)

2,7 Basis. Voraussetzung ist, dass Sie eine andere Sprache beherrschen.

Beziehung

Module und Klassen

from import Deklaration "Dezimalklasse aus dem Standardmodul namens Dezimal verwenden"

>>> from decimal import Decimal

Importieren Sie alle Klassen
>>> d = Decimal(10)
>>> print d
10

>>> print d + 3  #Dezimalklasse+Hat eine Methode, die dem Operator entspricht
13

Weitere Informationen zu Decimal finden Sie unter http://docs.python.jp/2/library/decimal.html

Klassendefinition

>>> class MyClass:
...	    pass
...
>>> mc = MyClass()
>>> print mc
<__main__.MyClass instance at 0x1076245a8>

Klassennamen werden normalerweise in Kamelfällen geschrieben. pass ist eine Nulloperation und macht nichts.

Attribut

Python ist nicht in der Lage, Elementvariablendefinitionen zusammen mit Klassendefinitionen zu schreiben. Attribute (Datenelemente) werden für jede Instanz definiert, indem sie Variablen zugewiesen werden, die für die generierte Instanz durch Punkte getrennt sind.

>>> mc = MyClass()
>>> mc.value = 10
>>> print(mc.value)
10

>>> mc2 = MyClass()
>>> print mc2.value
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: MyClass instance has no attribute 'value'

Methodendefinition und \ __ init__

\ Init (und \ __ new__) wird als konstruktorähnliche Initialisierungsmethode bereitgestellt.

class MyClass:
    #Initialisierungsmethode
    def __init__(self):
        self.h = 'hoge'   #Attribute hinzufügen
        
    #Methode
    def print_h(self):
        print h
        
mc = MyClass()
mc.print_h()  # => 'hoge'

Das Instanzobjekt selbst wird an das erste Argument, self, übergeben. Es ist üblich, sich selbst zu benutzen, aber dies und ich arbeiten auch. Wenn Sie bei der Initialisierung Variablen angeben möchten

class Rect:
    def __init__(self, width, height):
        self.width = width
        self.height = height
        
    def area(self):
        return self.width * self.height
        
r = Rect(100, 50)
print r.height  # => 50
print r.area    # => 5000

so werden. Beachten Sie, dass der Aufrufer der Initialisierungsmethode das erste Argument ignoriert. Wenn Sie sich im Streit vergessen,

>>> class MyClass():
...     def hoge():
...         print 'hoge'
...
>>> mc = MyClass()
>>> mc.hoge()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: hoge() takes no arguments (1 given)

Wird zu dem Fehler führen.

Verkapselung

In Python gibt es keine privaten Schlüsselwörter. Wenn Sie ein Attribut oder einen Methodennamen ausblenden möchten, fügen Sie einen Unterstrich (einen oder zwei) davor ein.

def _private_method():
    # ....
    
def __secret_method():
    # ....

In einem Fall ist es üblich, die Absicht auszudrücken, "nicht von außen anzurufen", und in beiden Fällen wird der Name intern automatisch geändert, um ihn von außen nicht mehr abzurufen.

class MyClass:
    def __init__(self, size):
        self._size = size
        self.__size = size

mc = MyClass(100)
print mc._size    # => 100
print mc.__size   # => AttributeError

Klassenvererbung

Python unterstützt ** Mehrfachvererbung **. Sie können auch neue Klassen erstellen, indem Sie integrierte Typen wie Zahlen und Zeichenfolgen erben.

Definition

Klasse (Superklassenname [, Superklasse 2, Superklasse 3 ,,]):

Es scheint, dass das Verhalten etwas anders ist, wenn die geerbte Klasse nicht angegeben ist und wenn das Objekt geerbt wird. Es wird empfohlen, ein Objekt zu erben, wenn es nichts erbt (?).

In Python3 wird das Objekt anscheinend standardmäßig vererbt, wenn die übergeordnete Klasse nicht angegeben wird.

class C1(): 
    pass
print dir(C1) #=> ['__doc__', '__module__']

class C2(object): 
    pass
print dir(C2) #=> ['__class__', '__delattr__', '__dict__', '__doc__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__str__', '__weakref__']

Override und super

class Rectangle(object):
    def __init__(self, w, h):
        self.w = w
        self.h = h
        self.color = 'red'
  
    def area(self):
        return self.w * self.h
      
      
class Square(Rectangle):     
    #Definieren Sie die Initialisierungsmethode neu (überschreiben Sie sie)
    def __init__(self, length):
        self.w = self.h = length

s = Square(100)
print s.area()   #=>10000, Methodenaufruf der übergeordneten Klasse

Methodenüberschreibungen sind vollständige Überschreibungen und rufen den übergeordneten Konstruktor nicht automatisch auf. So ist beispielsweise die von der übergeordneten Klasse \ init () oben initialisierte variable Farbe in der Square-Klasseninstanz nicht vorhanden. Um dies zu verhindern, rufen Sie die übergeordnete Methode mit super () auf.

class Square(Rectangle):
    def __init__(self, length):
        super(Square, self).__init__(length, length)

Ich muss es peinlich nennen. Identifizieren Sie die übergeordnete Klasse, indem Sie Ihren Typ und Ihr Selbst übergeben. Wenn zu diesem Zeitpunkt die übergeordnete Klasse die Objektklasse nicht erbt, tritt ein Fehler auf.

In Python3 scheint es, dass Sie eine Superklasse mit nur "super ()" erhalten können.

Recommended Posts

Python-Grundgrammatik (Verschiedenes) Memo (3)
Python-Grundgrammatik (Verschiedenes) Memo (2)
Python-Grundgrammatik (Verschiedenes) Memo (4)
Python-Grundgrammatik (Sonstiges)
Python grundlegende Grammatik Memo
Python-Grammatik-Grundnotiz (1)
Grundlegende Grammatik von Python3
Python-Grundnotiz - Teil 2
Grundlegende Python-Befehlsnotizen
Python-Grundnotiz - Teil 1
Grundlegende Grammatik des Python3-Systems (einige Iterationen von Python)
Python-Installation und grundlegende Grammatik
Grundlegende Python-Grammatik für Anfänger
Python (Python 3.7.7) Installation und grundlegende Grammatik
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Python-Memo
Vergleich der grundlegenden Grammatik zwischen Java und Python
Grundlegende Grammatik des Python3-Systems (Wörterbuch)
RF Python Basic_01
Python-Anfänger-Memo (9.2-10)
Python-Grammatikprüfung
Python-Anfänger-Memo (9.1)
Flask Grundnotiz
Python-Grundschrift
★ Memo ★ Python Iroha
[Grundlegende Grammatik] Unterschiede zwischen Ruby / Python / PHP
[Python] EDA-Memo
Python 3-Operator-Memo
Python-Grammatiknotizen
[Python] Ich habe die grundlegende Grammatik persönlich zusammengefasst.
Grundlegende Grammatik der Python3-Reihe (Zeichenkette)
Grundlegende Grammatik der Python3-Reihe (Liste, Tapple)
[Mein Memo] Python
Python3-Metaklassen-Memo
RF Python Basic_02
[Python] Grundkarten-Memo
Grundlegende Grammatik des Python3-Systems (inklusive Notation)
Python-Anfänger-Memo (2)
[Python] Numpy Memo
Memo Nr. 3, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 1, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 2, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 7, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
Memo Nr. 6 für Python-Anfänger zum Lesen von "Detaillierte Erklärung der Python-Grammatik"
Memo Nr. 5, dass Python-Anfänger "Detaillierte Erklärung der Python-Grammatik" lesen
[Go] Grundlegende Grammatik ① Definition
Python-Grundkurs (12 Funktionen)
Python Memo Basic Edition
Python-Klasse (Python-Lernnotiz ⑦)
Python-Grundkurs (7 Wörterbuch)
Python OpenCV Installation (Memo)