Seite 1 von 1

Verfasst: Mittwoch 13. August 2008, 07:12
von BlackJack
Zu den *-Importen: Wenn man mehr als einen davon verwendet, und irgendwann in der Zukunft ein Modul in einer neuen Version einen Namen verwendet, der auch in einem anderen, auf diese Weise importierten Modul verwendet wird, gibt's Probleme. Und Programme sollten nicht plötzlich, ohne das man am Quelltext selber etwas ändert, "kaputt gehen". Das ist sehr überraschend und nervig.

Wenn man sich an *-Importe gewöhnt, steigt die Gefahr für so etwas, da die Namen dann über ganze Importhierarchien verteilt werden. Man holt sich dann nicht nur alle Namen aus einem Modul in den Namensraum, sondern auch alle, die dieses Modul per * importiert hat und so weiter. Damit führt man das Konzept von Modulnamensräumen ad absurdum.

Namenskonflikt, den ich schon ein paar mal in Anfängerquelltext gesehen habe: `PIL.Image` und `Tkinter.Image`. Das ist also kein rein theoretisches Problem.

Verfasst: Mittwoch 13. August 2008, 09:26
von Leonidas
BlackJack hat geschrieben:Namenskonflikt, den ich schon ein paar mal in Anfängerquelltext gesehen habe: `PIL.Image` und `Tkinter.Image`. Das ist also kein rein theoretisches Problem.
Ja, wobei ich zugeben muss, dass dies aus irgendeinem Grund seit Jahren nicht mehr zur Sprache kam. Also entweder finden Anfänger unsere alten Threads dazu oder sie nutzen Tkinter/PIL nicht mehr.

Aber für Namenskonflikte braucht man gar nicht 3rd-Party Module zu nehmen; wenn man per *-Import ``os`` reinzieht, überschreibt man das Builtin ``open()`` durch ``os.open``.