Nichtexistente Attribute von Klasse ansprechen (für Wrapper)

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

@BlackJack&Bords0: hmm, das mit den nicht kopierbaren objekten bzw. der Problematik flache/tiefe Kopie ist ein echtes Argument. Da muss ich erstmal drüber nach denken.
Danke erstmal für die Diskussion; ich versteh jetzt ein Stück besser warum die Dinge so sind wie sie sind.

MFG HerrHagen
Benutzeravatar
str1442
User
Beiträge: 520
Registriert: Samstag 31. Mai 2008, 21:13

Dieser Weg ist außerdem konsequent. Jedes Statement in Python wird direkt ausgeführt, warum sollte das bei def anders sein? Würde man es anders machen, müsste man jede Menge Magie zu def hinzufügen.

Außerdem bietet der Python Weg einfach mehr Möglichkeiten. Man kann immer nachträglich im Funktionskörper ein Objekt aus den Standardparametern kopieren (und kann sich dann um die Problematik des flachen und tiefen Kopierens selber kümmern). Genauso kann man auch einfach (lambda) Funktionen übergeben, wenn bestimmte Parameter unbedingt immer wieder neu ausgewertet werden müssen. Das ist auch imho der klarere und eigentlich gesuchte Weg: Statt zb. random.random() immer neu auswerten zu lassen, fordert man einfach eine "Zufallsfunktion" an und setzt sie standardmässig auf random.random und fertig. Was soll eigentlich mit Funktionen selbst passieren, wenn sie kopiert werden sollen? Spätestens hier wird es dann sehr unperformant.

Das Verhalten ist anfangs ungewohnt, fügt sich aber besser in Python ein als jede andere Möglichkeit, bietet die größtmögliche Freiheit, es wird keine Ausnahmen für Funktionen was Zuweisungen angeht eingeführt und zusätzlich ist es noch performant.

EDIT: Gut random ist dafür nicht das beste Beispiel. Aber da könnte man ja auch einfach None zum Standard erklären und dann mit random.random() eine Zahl generieren, wurde keine vom Aufrufer übergeben.
Antworten