Seite 1 von 1

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

Verfasst: Sonntag 27. Dezember 2009, 10:25
von whaeva
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.

Verfasst: Sonntag 27. Dezember 2009, 11:11
von snafu
`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.

Verfasst: Sonntag 27. Dezember 2009, 11:12
von EyDu
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.

Verfasst: Sonntag 27. Dezember 2009, 11:47
von whaeva
Danke.