Klassenobjekte unterstützen zwei Arten von Operationen: Attributreferenzen und Instanziierung
Attributreferenzen verwenden die Standardsyntax, die für alle Attributreferenzen in Python verwendet wird: obj.name. Gültige Attributnamen sind alle Namen, die sich beim Erstellen des Klassenobjekts im Namespace der Klasse befanden. Wenn also die Klassendefinition so aussah:
class MyClass:
"""A simple example class"""
i = 12345
def f(self):
return 'hello world'
dann MyClass.i
und MyClass.f
sind gültige Attributreferenzen, die eine Ganzzahl bzw. ein Funktionsobjekt zurückgeben. Klassenattribute können auch zugewiesen werden, sodass Sie den Wert von MyClass.i
durch Zuweisung ändern können . __doc__
ist auch ein gültiges Attribut, das den zur Klasse gehörenden Dokumentstring zurückgibt: "Eine einfache Beispielklasse".
Die Klasseninstanziierung verwendet die Funktionsnotation. Stellen Sie sich einfach vor, das Klassenobjekt sei eine parameterlose Funktion, die eine neue Instanz der Klasse zurückgibt. Zum Beispiel:
x = MyClass()
Die Instanziierungsoperation ("Aufrufen" eines Klassenobjekts) erstellt ein leeres Objekt. Viele Klassen erstellen gerne Objekte mit Instanzen, die an einen bestimmten Anfangszustand angepasst sind. Daher kann eine Klasse eine spezielle Methode mit folgendem Namen definieren __init__()
:
def __init__(self):
self.data = []
Wenn eine Klasse eine __init__()
Methode definiert , wird die Klasseninstanziierung automatisch __init__()
für die neu erstellte Klasseninstanz aufgerufen. In diesem Beispiel kann eine neue, initialisierte Instanz erhalten werden durch:
x = MyClass()
Natürlich kann die __init__()
Methode Argumente für eine größere Flexibilität haben. In diesem Fall werden Argumente, die dem Klasseninstanziierungsoperator gegeben wurden, an weitergeleitet __init__()
. Zum Beispiel,
class Complex:
def __init__(self, realpart, imagpart):
self.r = realpart
self.i = imagpart
x = Complex(3.0, -4.5)
x.r, x.i
Entnommen aus offiziellen Unterlagen, die mir am Ende am meisten geholfen haben.
Hier ist mein Beispiel
class Bill():
def __init__(self,apples,figs,dates):
self.apples = apples
self.figs = figs
self.dates = dates
self.bill = apples + figs + dates
print ("Buy",self.apples,"apples", self.figs,"figs
and",self.dates,"dates.
Total fruitty bill is",self.bill," pieces of fruit :)")
Wenn Sie eine Instanz der Klasse Bill erstellen:
purchase = Bill(5,6,7)
Du erhältst:
> Buy 5 apples 6 figs and 7 dates. Total fruitty bill is 18 pieces of
> fruit :)
x = 'Hello'
außerhalb von init, aber innerhalb der Klasse setzen? Ist es wie Java, wo es dasselbe ist, oder wird es wie eine statische Variable, die nur einmal initialisiert wird?