Python Class-File (wie in Java)

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.
Finn
User
Beiträge: 1
Registriert: Dienstag 15. Mai 2007, 16:31

Python Class-File (wie in Java)

Beitragvon Finn » Dienstag 15. Mai 2007, 16:43

Hallo,

ich komme aus der Java-Welt und will jede Klasse in einer eigenen Datei speichern. Leider ist die Instanziierung der Klasse sehr unschön, da der Modulname immer eingeschoben werden muss. Ich dachte folgender Ansatz würde funktionieren:

Klasse Package: pkg, Module: jonny.py

Code: Alles auswählen

class jonny:
    def __init__(self):
        print "Jonny"
    def doSomething(self):
        print "abc"

sys.modules[__name__] = jonny


Main

Code: Alles auswählen

from pkg import jonny
if __name__ == '__main__':
    a = jonny()
    a.doSomething()


Funktioniert wurderbar.

Folgendes funktioniert nicht mehr:

Code: Alles auswählen

:
import sys
class jonny:
    def __init__(self):
        print "Jonny"
    def doSomething(self):
        print "abc"
        sys.getwindowsversion()

sys.modules[__name__] = jonny


Fehlermeldung

Code: Alles auswählen

sys.getwindowsversion()
AttributeError: 'NoneType' object has no attribute 'getwindowsversion'


Ich wüßte gerne warum und wie ich das erreichen kann was ich haben will?

Danke und Gruß
Finn
BlackJack

Beitragvon BlackJack » Dienstag 15. Mai 2007, 17:08

`sys` ist als Name im Modul definiert und das Modul ersetzt Du durch die Klasse die diesen Namen nicht kennt -> Problem.

Lass diesen Blödsinn einfach und gewöhne Dir entweder ``from pkg.Jonny import Jonny`` an, oder strukturiere Deinen Quelltext etwas "pythonischer". Das Modul hat in Python in etwa den Stellenwert eines Packages in Java. Zusammengehörige Klassen und Funktionen kann man in einem Modul zusammenfassen.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Dienstag 15. Mai 2007, 17:24

Sachen, die man mit `import` (im Gegensatz zu `from import`) importiert sind Module, und Objekte in `sys.modules` sind auch Module. Daran gibts nichts zu rütteln.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]