_
toggle menu eXmatrikulationsamt.de
online: 362 gäste

> Objektorientiert arbeiten mit Python

Themen Layout: Standard · Linear · [Outline] Thema abonnieren | Thema versenden | Thema drucken
post 02 Jan 2009, 17:11
avatar
eXma Poltergeist
*********

Punkte: 6729
seit: 20.10.2004

Hallo Mitnerds,

will mich schon seit ein paar Tagen in Python einarbeiten, kann jedoch noch nicht wirklich erkennen, was daran so überaus toll sein soll. (Sorry für evtl. Fehlschlüsse oder Halbwahrheiten, bin noch ziemlich neu und nubig, was Python angeht)
Klar, die Omnipräsenz von Objekten ist ganz cool, z.B. für Callbacks und so, aber bspw. geht mir dieses "es ist nicht wichtig, zu welcher Klasse ein Objekt gehört, sondern nur, ob es die entsprechenden Methoden enthält" Credo auf den Sack. Ohne Typüberprüfung und co. laufe ich doch immer Gefahr in einen Runtime Error zu geraten. Klar gibts Exceptions und so, aber so richtig wohl fühle ich mich nicht bei dem Gedanken, sowas ständig zur Laufzeit prüfen zu müssen.
Des weiteren scheint es keine Unterscheidung zwischen Privat und Public zu geben, darüber hinaus können Objekteigenschaften überall definiert werden zu können oder täusche ich mich da?
Gleiches gilt für so m. M n. wunderbare Sachen, wie Interfaces und abstrakte Klassen. Klar kann Python Mehrfachvererbung und man kann sich sowas dann quasi per Hand zusammenbasteln. Trotzdem, durch die nicht vorhandene Typprüfung wird das ganze doch etwas ad absurdum geführt, denn ich kann ja nicht überprüfen, ob ein bestimmtes Objekt jetzt ein bestimmtes Interface (bspw. Iterator) implementiert, sondern eben nur, ob die beschissene Methode da ist und das eben erst zur Laufzeit.

Hm also entweder funktioniert die OOP hier ganz anders und ich muss erstmal auf den Geschmack kommen, oder die ganze Sache ist etwas abgefuckt. Kann mich da mal jemand aufklären?


--------------------
ProfilPM
AntwortenZitierenTOP
 
Antworten
post 03 Jan 2009, 12:48
avatar
1. Schein
*

Punkte: 22
seit: 28.02.2008

Einige Design Patterns sind in der Tat nicht wirklich Sprach-unabhängig sondern gehen von Java-Style typed/nondynamic/SI OO aus.

Mit zope.interface gibt es eine relativ populäre Implementierung vom Interface-Konzept für Python though. Und neue versionen kommen mit ABCs (abtstract base classes) built in.

Die nicht-existenz von access-control (public/private/protected) ist ein Feature, das es ja im Grunde bei so ungefähr jeder Sprache gibt, die meisten machen es nur eine Ecke schwerer das zu umgehen. Bei Python gilt (auch in vielen anderen Bereichen, siehe das von dir schon angesprochene 'Duck-typing'): Wir sind hier unter Erwachsenen. Ich teile dir mit, dass diese methode bzw. dieses attribut meiner Klasse nicht zur public API derselben gehört, wenn du also schlau bist wirst du es nicht benutzen (bzw nur wenn es wirklich unbedingt sein muss). (Und Re: Anatol: das name mangling mit 2 underscores ist nicht für private-emulation gedacht sondern um name-clashing bei MI zu vermeiden. sollte man im Grunde nie benutzen. "private" zeigt man iA mit einem underscore an.

Dieser Beitrag wurde von avu: 04 Jan 2009, 04:02 bearbeitet


--------------------
Fucking for peace is like bombing for virginity.
ProfilPM
AntwortenZitierenTOP
Beiträge
Stormi   Objektorientiert arbeiten mit Python   02 Jan 2009, 17:11
anatoL   Vielleicht hilft Dir eine "test-driven" ...   02 Jan 2009, 18:15
stth   nein. Python wird dich versauen ;)   02 Jan 2009, 21:14
1 Nutzer liest/lesen dieses Thema (1 Gäste)
0 Mitglieder: