2017-03-31 6 views
0

Ich bin neu in Python, und ich habe ein Dilemma in Bezug auf OOP (ich bin vertraut mit OOP-Konzepte). Grundsätzlich
, ich habe eine Klasse mit einer statischen Klassenvariablen (counter, die zeigt, wie viele Objekte ich instanziiert haben):Python OOP Objekt Instanziierung

class Employee: 
    counter=0 
    def __init__(self,name): 
    self.name=name 
    Employee.counter+=1 

So, jetzt instanziieren ich ein Objekt:

obj1=Employee("Alan") 

Meine Frage ist, : Was passiert, wenn ich diesen Anruf habe? Was passiert dahinter, weil die statische Variable "counter" inkrementiert wird, aber auf das so erzeugte Objekt zugegriffen werden kann?

Employee("foo") 

<__main__.Employee object at 0x02A16870>

Dank

+0

Die '__init__' -Funktion ist Ihr Konstruktor, also erhöht sie' counter' wenn Sie ein neues 'Mitarbeiter Objekt erstellen. Was genau fragst du? –

+0

Der von Ihnen angezeigte Code wird nicht ausgeführt. 'Zähler 'sollte über die Instanz oder Klasse –

+0

10 @MosesKoledoye zugegriffen werden: Warum nicht? Oh, ich sehe jetzt ... 'counter + = 1' sollte' Employee.counter + = 1' sein. –

Antwort

4

aller Zuerst müssen Sie counter+=1Employee.counter += 1 sein, um für den Code zu verhalten, wie Sie es tut sagen. Andernfalls erhalten Sie eine Fehlermeldung, wenn Sie versuchen, eine Variable, die nicht im Bereich __init__ liegt, zu inkrementieren.

Da Sie keinen Bezug auf Employee("foo") haben, wird es bald Müll gesammelt und für immer weg sein. Dies ändert jedoch nichts an der Tatsache, dass Employee.__init__ aufgerufen wurde, um Ihre counter zu erhöhen.

+0

Ja, ich habe vergessen, den Employee.counter + = 1 zu setzen. Im Grunde, da jetzt eine Referenz vorhanden ist, wird der Garbage Collector den Heap freigeben. Vielen Dank für die Erklärung. – distrobyte

1
Employee("foo") 

Diese Aufgabe oben erstellt werden so schnell verloren, wie es verwendet wird und nicht wieder verwendet, während werden können, wenn Sie ein Objekt wie

obj1=Employee("Alan") 

instanziiert haben Sie eine Referenz dieses Objekts in obj1 und es kann wiederverwendet werden.

Meine Frage, was passiert, wenn ich diesen Anruf habe? Was hinter

geschieht

Die __init__ Funktion ist der Konstruktor und es wird jedes Mal, wenn Sie ein neues Objekt der Klasse erstellen genannt. Da diese Funktion __init__ die Zählervariable erhöht, wird bei jedem Erstellen eines Objekts die Funktion __init__ aufgerufen und der Zähler wird inkrementiert.