Modul-globale Namen

20/05/2010 - 10:23 von Ole Streicher | Report spam
Hallo,

ich habe folgendes Problem: Ich habe ein package, welches aus
verschiedenen Modulen besteht. Dabei werden per Variablen bestimmte
Eigenschaften gesetzt -- beispielsweise ein Suchpfad (für dynamische
Bibliotheken). Aus User-Sicht soll das so aussehen:

import mypkg

mypkg.lib_dir = '/path/to/the/libraries'
(...)
myobject = mypgk.MyClass('Name')

Nun besteht mypkg aus einigen Teilen, u.a. einem, der das Öffnen
vornimmt:

__init__.py -
from myclass import MyClass
lib_dir = None
...

und in myobject gibt es etwas wie
- myclass.py -
class MyClass(object):
def __init__(self, name):
self.lib = find_the_library(lib_dir, name)
...

Die Frage ist nun, wie bekomme ich die Variable "lib_dir" in das Modul
"myclass"?

Viele Grüße

Ole
 

Lesen sie die antworten

#1 Thomas Rachel
21/05/2010 - 05:57 | Warnen spam
Am 20.05.2010 10:23, schrieb Ole Streicher:

Die Frage ist nun, wie bekomme ich die Variable "lib_dir" in das Modul
"myclass"?



Da bleibt eigentlich fast nur:


* entweder ein Datenmodul:

data.py

lib_dir = None

welches (evtl.) von __init__.py importiert wird, so daß es direkt nach

import mypkg

verfügbar ist. Dann geht ein

mypkg.data.lib_dir = 'foo'

, worauf ein myclass.py zugreifen kann mit

from __future__ import absolute_import

from . import data

-> Zugriff auf data.lib_dir möglich.

(Statt data.py vielleicht config.py? Wies beliebt.)


Weitere Möglichkeit wàre eine Setter-Funktion, die "nach außen getragen"
wird:


in __init__.py:
from __future__ import absolute_import
from .myclass import setlib


in myclass.py:

lib_dir = None

def setlib(lib):
global lib_dir
lib_dir = lib


Thomas

Ähnliche fragen