Py2Exe Probleme mit Objekten

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.
Antworten
berni-86
User
Beiträge: 3
Registriert: Montag 12. Dezember 2011, 11:37

Hallo,

ich bin ganz neu im Forum angemeldet. Ich arbeite jetzt schon ca. ein halbes Jahr mit Python, Vorkentnisse habe ich in Java und PHP. Nach dem ich mich schon ziemlich gut in Python eingearbeitet habe und einige Skripte geschrieben habe, stehe ich nun vor einem Problem.

Kurz zum Aufbau:
Ich habe eine Objektorierntiertes Skript geschrieben mit mehreren Klassen. Die Main Klasse ruft dabei alle unteren Klassen auf. Dies Funktioniert in der Eclipseumgebung zu 100 Prozent.

Problem
Das Projekt habe ich nun mit py2exe in eine Exe Datei umschreiben lassen, funktionierte tadellos. Wenn ich die Exe Datei ausführe kommt es jedoch zu folgendem Fehler....

Code: Alles auswählen

Objekt = meineklasse(Paramter1, parmeter2)
TypeError: object.__new__() takes no paramter
Ich versteh die Fehlermeldung, jedoch verstehe ich nicht warum er die Parameter nicht findet. Ich habe die Paramter im Konstruktor festgelegt. Kann es sein das Py2exe eine obejktorientierte Programmierung nicht ünerstützt?

mfg
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Hallo,

Kannst Du uns ein minimales, lauffähiges Beispiel posten und dazu exakt die Kommandos, mit welchem Du das in eine exe-Datei umwandeln willst und dieser Fehler auftritt und dazu die exakte Fehlermeldung?

Deine Terminologie verwirrt auch ein wenig... "Klassen" rufen (__call__?) andere Klassen auf? Klingt für mich nach viel Meta-Magie. Ohne konkreten Code kann man dazu nicht viel sagen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
berni-86
User
Beiträge: 3
Registriert: Montag 12. Dezember 2011, 11:37

Ja, okay ich hab mcih etwas unverständllich ausgedrückt :D. Ich meine natürlich, in der Main Klasse wird ein Objekt von den entsprechenden Klassen instanziert.

Main Klasse

Code: Alles auswählen

Test = Rob(pfadRobDatei,pfadA2LDatei)
Test.generateExcelFile()

Hier meine Klasse

Code: Alles auswählen

class Rob(object):
    
    def __init__(self,pfadRobDatei,pfadA2LDatei ):
        
        self.__pfadRobDatei = pfadRobDatei
        self.__pfadA2LDatei = pfadA2LDatei

   def generateExcelFile ()
       ..........
Ich habe das komplette Projekt mit "setup.py py2exe" über die Kommandozeile bauen lassen. (Dies funktioniert auch ohne Fehlermeldungen). Rufe ich jetzt die erzeugte Exe über die Konsole auf, tritt der folgende Fehler auf.

Fehler Konsole

Code: Alles auswählen

Test = Rob(pfadRobDatei,pfadA2LDatei)
TypeError: object.__new__() takes no paramters
Ich hoffe ich konnte dir mit den Information etwas weiterhelfen.
berni-86
User
Beiträge: 3
Registriert: Montag 12. Dezember 2011, 11:37

Das Problem scheint nicht an py2exe zu liegen. Egal ob al EXE oder als Skript ausgeführt kommt folgende Fehlermeldung.

Code: Alles auswählen

TypeError: object.__new__() takes no paramters
In Eclipse läuft das Programm jedoch, ohne Probleme. Kann es sein das ich den instanzierten Objekten, keine Anfangswerte über den Konstruktor aufruf zuweisen darf? Was in meinen Augen jeoch völliger blödsinn ist.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wir brauchen ein *minimales, lauffaehiges Beispiel*, sonst können wir dir gar nichts zu deinem Problem sagen. Deine Vermutung ist aber in jedem Fall falsch (noch dazu ist `__new__` der Konstruktor, `__init__` nur der Initialisierer).

Ich wuerde ja mal darauf Tippen, dass du irgendwo etwas an den Namen `object` bindest.

Generell gilt: Der Ausführung in Eclipse kann man so nicht vertrauen, aber das hast du jetzt ja festgestellt.

Daneben noch der Hinweis: In Python gibt es keine privaten Attribute, missbrauche nicht name-mangling um den Zugriff zu erschweren, sondern verwende einen Unterstrich, um das als private fuer andere zu kennzeichnen.

Und der Hinweis auf PEP 8 darf natuerlich auch nicht fehlen.
Antworten