https://qiita.com/ganariya/items/fb3f38c2f4a35d1ee2e8
Es scheint, dass Python alles ein Objekt ist.
?? ?? ?? ?? ?? "Ja wirklich?" ?? ?? ?? ??
Ein Python-Objekt ist alles, was Python behandelt. Und das Objekt hat ** Attribute **.
Zum Beispiel
class A:
def __init__(self):
self.x = 50
a = A()
print(a.x)
Im obigen Code wird der Wert mit "Punkt" wie a.x. Es ist "** Attribut **" (x), das mit diesem Zeitraum abgerufen werden kann, und ein Attribut zu haben bedeutet auch ** Objekt ** (a).
class A:
def __init__(self):
self.x = 50
a = A()
print(type(a))
print(type(A))
print(type(30))
print(type(int))
'''
<class '__main__.A'>
<class 'type'>
<class 'int'>
<class 'type'>
'''
Schauen wir uns das obige Beispiel an und sehen wir, dass alle Python-Daten tatsächlich Objekte sind.
Der obige Code verwendet eine integrierte Funktion namens "Typ". type ist eine Funktion, die den Typ des als Argument übergebenen Objekts zurückgibt.
Beispielsweise ist das Objekt a vom Typ A des Moduls main. Darüber hinaus hat die Klasse A, bei der es sich um den ursprünglichen Typ handelt, einen Typ namens Typ. In ähnlicher Weise ist die Python-Nummer 30 vom Typ int, und wir wissen, dass 30 ein Instanzobjekt von int ist.
Wie Sie sehen können, bestehen alle Python-Daten anscheinend aus Objekten.
Es scheint zusammengesetzt zu sein aus.
Was ist ein Klassenobjekt?
Wie der Name schon sagt, ist ein Klassenobjekt Bezieht sich auf das "Objekt dieser Klasse, wenn Sie die Definition der Klasse abgeschlossen haben".
Zum Beispiel
class A:
x = 50
print(10)
def __init__(self):
self.x = 100
print(self.x)
print(A.x)
a = A()
Betrachten Sie die obige Quelle.
Was passiert mit dem Ergebnis dieser Ausführung?
das ist
10
50
100
Es sieht aus wie.
Python-Klassen werden mit Ausnahme von def so ausgeführt, wie sie sind, und jede Zeile wird wie eine normale Anweisung ausgeführt.
Wenn Sie also Klasse A finden, wenn Sie eine Python-Datei von oben lesen Geh runter wie es ist
x = 50
print(10)
Erstellen Sie nach dem Laden der Klasse A ein Klassenobjekt mit dem Namen A. Daher wird A ein ** Klassenobjekt **, wenn das Lesen abgeschlossen ist.
Es ist wichtig, dass es sich um ein Klassenobjekt handelt.
Instanzobjekte sind Objekte, die aus "Klassenobjekten" erstellt wurden.
Speziell
--30 (generiert aus int) --a (generiert aus A) --Funktion
Und so weiter.
Weil es aus einem Klassenobjekt generiert wird
class A:
def __init__(self):
self.x = 100
a = A()
print(type(a))
print(type(30))
print(type(int))
'''
<class '__main__.A'>
<class 'int'>
<class 'type'>
'''
a ist ein Klassenobjekt __main __. A vom Typ a 30 ist ein Klassenobjekt int vom Typ 30
Es ist geworden.
Auf diese Weise werden Instanzobjekte aus Klassenobjekten erstellt.
Funktionen werden auch aus einem Klassenobjekt generiert, das als Funktionsklasse bezeichnet wird.
Funktionen sind ebenfalls Objekte. Ein Objekt kann Attribute verwenden. Insbesondere, weil die Funktion ein Instanzobjekt ist, dessen Attribute frei festgelegt werden können.
Zum Beispiel
--Überprüfen Sie, ob matplotlib nur einmal gelesen werden kann
Sie können eine Funktion mit dem Namen erstellen.
def can_load_matplotlib():
if can_load_matplotlib.cache is None:
try:
import matplotlib
except ImportError:
can_load_matplotlib.cache = False
else:
can_load_matplotlib.cache = True
return can_load_matplotlib.cache
can_load_matplotlib.cache = None
print(can_load_matplotlib())
Bereiten Sie die Funktion can_matplotlib vor.
Die Python-Datei erstellt nur die Identität (Speicher), dass "die Funktion in dieser Zeile steht ~ ~", bis die Funktion ausgeführt wird.
Also zuallererst im obigen Code
Sie können den Code schreiben.
Ich habe diesen Code kennengelernt, als ich den Code des Übersee-Typs GitHub kopiert habe, und fand ihn erstaunlich. Aber wie schnell beschleunigt sich das Caching? Ich weiß es nicht.
In Python haben wir gesehen, dass Klassen, Zahlen und Zeichenfolgen Objekte sind.
Ich möchte schreiben, während ich zwischen einer Instanz und einem Klassenobjekt unterscheide.
Recommended Posts