Module und object scope (global name 'xx' is not defined)

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
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Hallo!
Ich versuche, ein Programm auf überschaubare Funktionssammlungen aufzuteilen. Aufgrund des Gültigkeitsbereichs von Objekten/Variablen funktioniert das nicht.

Ein Minimalbeispiel:

main.py:

Code: Alles auswählen

import module
import function
ob_ject = module.cl_ass()
ob_ject.me_thod()
function.function()
module.py:

Code: Alles auswählen

class cl_ass(object):
  def __init__(self):
    pass
  def me_thod(self):
    print "hello"
function.py:

Code: Alles auswählen

def function():
  global ob_ject
  print type(ob_ject)

Code: Alles auswählen

File "function.py", line 7, in function
    print type(ob_ject)
NameError: global name 'ob_ject' is not defined
Ich würde mich freuen, wenn mir jemand kurz schildern könnte, warum das so keine gute Idee ist, und wie die Aufteilung besser wäre. Vielen Dank.
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

`global` guckt nur auf die eigene Modulebene, nicht auf die Ebene des aufrufenden Moduls. Daher ist der Name nicht definiert. Lass `function()` das `ob_ject` als Argument annehmen, dann kannst du `global` ganz vermeiden.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Am besten vergisst du erstmal, das "global" überhaupt existiert. Damit löst du keine Probleme, du legst dir nur neue zu. Benutze am besten Parameter und Rückgabewerte.
Das Leben ist wie ein Tennisball.
whaeva
User
Beiträge: 66
Registriert: Mittwoch 25. Februar 2009, 15:30

Danke.
Antworten