Seite 1 von 1

Kopie einer Liste erstellen

Verfasst: Samstag 3. März 2012, 15:29
von -dude-
Hallo zusammen,

ich habe folgende Situation: Es gibt eine Klasse K mit

Code: Alles auswählen

class K():
    def __init__(self):
        self.__liste = [1,2,3,4]

    def getListe(self):
        return self.__liste
und ich möchte nun folgendes tun:

Code: Alles auswählen

k = K
meineListe = k.getListe()
meineListe.insert(0,0)
Leider hab ich das Problem, dass nun

Code: Alles auswählen

 k.getListe 
[0,1,2,3,4] ergibt. Ich möchte aber den Inhalt nur lokal und nicht in k ändern. Wie kann ich das machen?

Danke schonmal

Re: Kopie einer Liste erstellen

Verfasst: Samstag 3. März 2012, 15:37
von BlackJack
@-dude-: Die `list()`-Funktion nimmt ein beliebiges iterierbares Objekt, also auch Listen, und erstellt eine Liste mit allen Elementen in dem übergebenen Objekt. Achtung: Das ist eine flache Kopie! Man bekommt eine neue Liste, aber darin sind die Objekte aus dem ursprünglichen iterierbaren Objekt.

Zur Namensgebung: Doppelte führende Unterstriche sind zur Vermeidung von Namenskollisionen bei Mehrfachvererbung gedacht. Wenn man anzeigen möchte, dass ein Attribut ein internes Detail ist, dann nimmt man *einen* führenden Unterstrich. „private” gibt es Python nicht — auch an `__foo` kann man problemlos von aussen heran kommen, wenn man das unbedingt möchte.

Triviale Getter/Setter sind in Python unüblich. Man greift direkt auf die Attribute zu. Für „berechnete Attribute” gibt es `property()`. Damit kann man seine Meinung auch später noch ändern, ohne die API ändern zu müssen.

Re: Kopie einer Liste erstellen

Verfasst: Samstag 3. März 2012, 15:47
von -dude-
Danke für deine Hilfe. Das man von außen Zugriff auf __bar variablen hat wusste ich aber die Konventionen waren mir bisher nicht klar. Das werde ich beherzigen.

Re: Kopie einer Liste erstellen

Verfasst: Samstag 3. März 2012, 20:38
von /me
-dude- hat geschrieben:

Code: Alles auswählen

k = K
Hier war sicherlich

Code: Alles auswählen

k = K()
gemeint, oder?

Re: Kopie einer Liste erstellen

Verfasst: Sonntag 4. März 2012, 12:44
von -dude-
Ja klar...