[Python-de] Python als Makroersatz, und was zum Lachen

daniel.poelzleithner poelzi at poelzi.org
Mit Jul 30 21:11:46 EDT 2003


Gerhard Häring wrote:
> Gerson Kurz wrote:
> 
>> Gegeben einen C-Header, der aus Zeug wie dem folgenden besteht:
>>
>> DECLARE_STRING(IDS_XYZ_STATUS_BUSY, "Busy")
>> DECLARE_STRING(IDS_XYZ_STATUS_COVER_OPEN, "Cover open")
>> DECLARE_STRING(IDS_XYZ_STATUS_DOOR_OPEN, "Door open")
>> ....(usw, viele hundert Zeilen lang)...
>>
>> möchte ich eine Datei erzeugen, die so ausschaut:
>>
>> [IDS_XYZ_STATUS_BUSY]
>> "Busy"
>>
>> [IDS_XYZ_STATUS_COVER_OPEN]
>> "Cover open"
>>
>> [IDS_XYZ_STATUS_DOOR_OPEN]
>> "Door open"...
>>
>> Dachte ich mir, kopierst du den Auszug in ein Pythonscript und schreibst
>>
>> def DECLARE_STRING(irgendwas, blabla):
>> [...]
> 
> 
>> Nun heisst es ja immer, mit Python könne man alles Makromäßige umsetzen -
>> wie aber mache ich sowas? Ich will ja praktisch auf der Fliege ("on the
>> fly"), neue Variablen erzeugen.
> 
> 
> __getattr__/__setattr__ geht leider (oder zum Glück) auf Modulebene 
> nicht, nur auf Klassenebene.

 >>> import bla
 >>> bla.__dict__["test"] = "bla"
 >>> print bla.
bla.__class__         bla.__file__          bla.__name__ 
bla.__setattr__
bla.__delattr__       bla.__getattribute__  bla.__new__ 
bla.__str__
bla.__dict__          bla.__hash__          bla.__reduce__        bla.test
bla.__doc__           bla.__init__          bla.__repr__
 >>> print bla.
 >>> bla.printattr()
test
printattr
__builtins__
__name__
__file__
__doc__

printattrs gibt einfach globals() aus.

globals()[var] = value ?

globals()["test"] = "bla"


grüsse
  daniel