[Python-de] Verstaendnisproblem: Programmweite Variablen

Gerhard Haering gh at ghaering.de
Wed Apr 2 11:26:56 EST 2003


Andreas Kaiser wrote:
> Hallo,
> 
> folgendes Problem:
> Eine Anwendung erfordert ein Login. Über einen Login-Dialog erfasse ich die 
> Variablen User und Passwort.
> Nun möchte ich diese Variablen (oder den Status eingeloggt als "User" 
> ja/nein) im gesamten Programm nutzen. Wie muss die Klasse aussehen, wo ich 
> persistent diese Infos ablege und wie kann ich die Infos aus anderen 
> Klassen abfragen?

Stichworte "Singleton" und "Borg", wenn du's nachlesen willst. Für 
Beispiele dafür würde ich 
http://aspn.activestate.com/ASPN/Python/Cookbook/ empfehlen.

> Mein Versuch:
> LoginData.py:
> class LoginData:
>     def __init__(self, user, passw):
>         self.user = user
>         self.passw = passw
>         
>     def getUser(self):
>         return self.user
>         
>     def getPassw(self):
>         return self.passw
> 
> in LoginDialog.py:
> 
> from LoginData import *
> ...
> p = LoginData("Paul", "geheim")
> 
> 
> in Anwendung.py
> 
> from LoginData import *
> ...
> user = LoginData.getUser()

hier rufst du getUser als Klassenmethode auf, es ist bei dir aber eine 
Instanzmethode.

> bekomme ich den Fehler:
> TypeError: unbound method getUser() must be called with LoginData instance 
> as first argument (got nothing instead)
> 
> 
> Ich brauche hierzu mal einen Denkanstoss oder ein Minimalbeispiel.

Ich bin grad auf dem Sprung, drum nur ganz schnell:

_logindata = None

import os
BLOAT = os.getenv("USERNAME") == "Robert.Kuzelj"   # ;-)

if BLOAT:
     class LoginData:
         """Bloat-Version"""
         def __init__(self, user, passwd):
             self._user, self._passwd = user, passwd

         def _getuser(self):
             return self._user

         def _getpasswd(self):
             return self._passwd

         user = property(_getuser)
         passwd = property(_getpasswd)

     def login(user, passwd):
         _logindata = LoginData(user, passwd)
else:
     def login(user, passwd):
         _logindata = (user, passwd)

def get_login():
     return _logindata

HTH,

-- Gerhard





More information about the Python-de mailing list