Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

04.05.2013, 11:03

[Python] Mehrere Funktionen in einer global[SOLVED]

Ich Probiere mehrere Funktionen einer global zuzuweißen.
Dies habe ich wie folgt gemacht.

Quellcode

1
2
import AoGUI
import LanguagePacks


Quellcode

1
2
3
4
    global init
    init.gAoGUI = AoGUI.AoGUI()
    
    init.gLanguage = LanguagePacks.LanguagePacks()


Die erste global funktion funktionioniert. Aber bei der zweiten bekomme ich folgende fehlermeldung

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
/------------------------------------------------------------------------------\
BigWorld Release Client (compiled at 12:20:30 Aug 27 2012) starting on Sat May 04 11:02:14 2013
C:/Users/Daniel/Desktop/ttt/res/scripts/client\BWPersonality.py: inconsistent use of tabs and spaces in indentation
Traceback (most recent call last):
  File "C:/Users/Daniel/Desktop/ttt/res/scripts/client\BWPersonality.py", line 43, in init
    init.gLanguage = LanguagePacks.LanguagePacks()
  File "C:/Users/Daniel/Desktop/ttt/res/scripts/common\LanguagePacks\__init__.py", line 22, in __init__
    StartGermanLanguagePacket.SetGermanLanguagePacket()
  File "C:/Users/Daniel/Desktop/ttt/res/scripts/common\LanguagePacks\German\StartGermanLanguagePacket.py", line 81, in SetGermanLanguagePacket
    if BWPersonality.init.gLanguage.CurrentLanguage == 'English':
AttributeError: 'function' object has no attribute 'gLanguage'
\--------------------------------------------------------------------------------/


Jemand eine Idee warum das nicht so funktioniert?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Lajah250« (05.05.2013, 11:11)


Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

2

04.05.2013, 14:10

Ich habe bisher in Python zwar noch nie mit global gearbeitet, aber ich vermute, dass zwischen den beiden Zuweisungen oder bei der Ausführung von "LanguagePacks" der WErt von "init" so angepasst wird, dass eine Funktion oder Methode sich dahinter verbirgt.
Sollte das der Fall sein, dann siehst du bereits einen Grund, warum du globale Variablen vermeiden solltest. Abgesehen davon gibt es aber auch noch sehr viele weitere Gründe.

Um den Fehler zu finden, könntest du aber am besten einfach mal den Debugger bemühen. ;) (Solltest du bisher keine Entwicklungsumgebung verwenden, kann ich dir nicht sagen, was der einfachste Weg zum Debuggen ist, allerdings würde ich dir empfehlen, Eclipse mit PyDev zu verwenden.)
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

3

05.05.2013, 11:10

Fehler gefunden und behoben.
Der Code den ich gepostet habe funktioniert perfekt.
So wie es ausschaut habe ich die funktion zufrüh aufgrufen und da hat die Engine die funktion noch nicht der global zugewissen.
Jetzt rufe ich die funktion 4 sec später auf und jetzt funktioniert es perfekt.

Was für weitere gründe würde es noch geben die zu meiden?

Ich arbeite bis jetzt immer nur mit Notepad++

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

4

05.05.2013, 11:22

Man erhält zu starke Abhängigkeiten einzelner Module von diesen globalen Variablen, was dazu führt, dass man diese nicht so einfach austauschen, wesentlich schwerer testen kann und Änderungen der globalen Variablen teilweise unvorhergesehene Nebeneffekte haben können.

Eclipse bietet dir einige Vorteile im Gegensatz zu Notepad++. Dazu gehören Auto Completion, sofern dies für Eclipse möglich ist (da Python ja eine dynamisch typisierte Sprache ist), Refactoring soweit wie möglich, Debugging (man kann den Code Zeile für Zeile durchgehen und sich zu jedem Zeitpnkt die Werte der Variablen anschauen), die Einrückungen werden automatisch vereinheitlicht (man hat also keine Mischung aus Leerzeichen und Tab, was in Python zu Fehlern führen könnte, da Tabs als 8 Leerzeichen interpretiert werden) und möglicherweise gibt es noch ein paar weitere Dinge, die ich gerade noch vergessen habe. Das, was dir Notepad++ bietet (Syntax Highlighting), wird es jedenfalls definitiv auch haben.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige