2016-04-30 5 views
3

Ich versuche, etwas grundlegendes Python-Objektdesign zu lernen. Eine Sache, die ich bemerkte, ist, dass Python nicht erfordert, dass Sie alle Datenmitglieder auflisten, bevor Sie sie innerhalb der Klasse verwenden können. Stattdessen habe ich festgestellt, dass Sie in der Lage sind, neue Datenelemente für verschiedene Methodenaufrufe in einer Klasse einzuführen.Können die gleichen Python-Objekte in der Größe variieren, da es keine formale Initialisierung gibt?

Mit Bezug auf den folgenden Code beachten Sie, wie ich den Konstruktor verwenden, um ein self.hello_world Mitglied zu deklarieren. Da der Konstruktor für jede Instanz dieser Klasse aufgerufen wird, bin ich sicher, dass jedes Objekt einen hello_world Member enthält.

Beachten Sie jedoch, wie ich ein self.dog Datenelement NUR erstellen, wenn ich die printTest Methode aufrufen. Dieses Datenelement würde nicht existieren, wenn ich diese Methode nicht aufrufen würde.

Also meine Frage, im Gegensatz zu der Programmiersprache C++, in der alle Objekte eine bestimmte Objektgröße haben müssen, können Python-Objekte instanziiert aus der gleichen Klasse in der Größe aufgrund, was ich darauf hingewiesen?

Vielen Dank!

# Class test 

class TestClass: 


    def __init__(self): 
     self.hello_world = 49 

    def printTest(self): 
     print("Trying to create new data member /n") 
     self.dog = "Biscuit" 
+4

Ummmmmmmm ja ... –

+0

Ich bin sicher, ja, da Sie beliebig viele Instanzattribute definieren können. Ich weiß jedoch nicht, ob sie als neue Werte oder nur als Zeiger auf Werte gespeichert sind. Es hängt also wirklich davon ab, was Sie davon halten, wenn Sie sagen, Objektgröße ... – Cosinux

+0

@RobertMoskal In Bezug auf Best Practice, ist es empfehlenswert, alle Daten Mitglied in der Funktion __init__ für eine bessere Lesbarkeit enthalten? – Izzo

Antwort

2

Ja, Sie haben Recht. Jede Instanz eines Objekttyps kann einen eigenen Satz von Mitgliedsdaten haben, indem sie Namen zugewiesen werden.

+1

Ich habe endlich eine Bestätigung bekommen, danke. Dies war eine Frage, die auf der Technik beruhte und nicht auf "Best Practices". – Izzo

Verwandte Themen