Seite 1 von 1

Python Class-File (wie in Java)

Verfasst: Dienstag 15. Mai 2007, 16:43
von Finn
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

Verfasst: Dienstag 15. Mai 2007, 17:08
von BlackJack
`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.

Verfasst: Dienstag 15. Mai 2007, 17:24
von birkenfeld
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.