besser so oder so?
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi rolgal,
ich kann mir schon Sites vorstellen, wo der footer nicht immer gleich bzw. bei Seiten für Rückmeldungen von Formularen nicht vorhanden ist.
Im Header könnte auch eine Navigationsleiste implementiert sein, die ist dann unter Umständen auch nicht immer gleich. Desweiteren, wenn das ganze Weitergegeben wird, können so die Daten und das Layout für den footer/header separat angepasst werden.
Gruß
Dookie
ich kann mir schon Sites vorstellen, wo der footer nicht immer gleich bzw. bei Seiten für Rückmeldungen von Formularen nicht vorhanden ist.
Im Header könnte auch eine Navigationsleiste implementiert sein, die ist dann unter Umständen auch nicht immer gleich. Desweiteren, wenn das ganze Weitergegeben wird, können so die Daten und das Layout für den footer/header separat angepasst werden.
Gruß
Dookie
hi dookie!
ich habe noch fragen zu deinem bsp.
warum hast du nicht im dictionary
aufgenommen?
mfg
rolgal
ich habe noch fragen zu deinem bsp.
warum hast du
Code: Alles auswählen
content_type = "Content-Type: text/html\n\n"
Code: Alles auswählen
base_vars = {"site" : site_template,
"title" : "crossoverguitar",
"stylesheet" : "../../crossover/sheet1.css",
"background" : "../../crossover/_themes/kopie-von-sumi-malerei/sumtextb.jpg",
"header" : site_header,
"content" : "",
"master_mail" : "rolandgall@weberanto.net",
"footer" : site_footer}
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi rolgal,
weil sich der Content-Type kaum ändert, und wenn ists ein Indiz dafür eine neue Klasse in der dieser dann redefiniert wird von Site abzuleiten.
Eventuell könnte man auch eine Basisklasse "Webcontent" erstellen, von der man Site ableitet und die dann den Content-Type beinhaltet. Von dieser Basisklasse könnten dann, neben der Klasse für html-Seiten auch Klassen für Bilder (jpg, gif, png), CSS, oder anderen Inhalt der im Web vorkommen kann, abgeleitet werden.
Gruß
Dookie
weil sich der Content-Type kaum ändert, und wenn ists ein Indiz dafür eine neue Klasse in der dieser dann redefiniert wird von Site abzuleiten.
Eventuell könnte man auch eine Basisklasse "Webcontent" erstellen, von der man Site ableitet und die dann den Content-Type beinhaltet. Von dieser Basisklasse könnten dann, neben der Klasse für html-Seiten auch Klassen für Bilder (jpg, gif, png), CSS, oder anderen Inhalt der im Web vorkommen kann, abgeleitet werden.
Gruß
Dookie
hallo dookie!
also ich habe heute mal mit den new style klassen rumgespielt.
zuerst mal eine reduktion des codes auf das notwendigste:
zum experementieren, habe ich einiges wie die globalen variablen(site template) und andere klassenvariablen usw. rausgenommen.
so: wofür das gut ist hast du uns ja gezeigt. ich schliesse mich jetzt einfach mal der meinung an, dass es sinnvoll ist, wenn man objekte von aussen nicht ändern kann.
ich frage mich schön langsam, ob das oop design in python irgendwie eine halbe sache ist.
wir wissen, funktioniert folgendes nicht:
aber das geht ohne weiters, und dann war wohl alles irgendwie umsonst, oder nicht?
und eigentlich logisch, dass die instanz das nun auch hat.
sollte ja ein schutzmechanismus sein. wenn ich aber über die klasse die instanz verändern kann, und so wie hier in dem fall auch den aktuellen wert der instanz überschreiben kann, dann seh ich keinen sinn darin.
mfg
rolgal
also ich habe heute mal mit den new style klassen rumgespielt.
zuerst mal eine reduktion des codes auf das notwendigste:
Code: Alles auswählen
#!/usr/local/bin/python
class Test(object):
__slots__=['site_vars']
base_vars={'a' : '1',
'b' : '2',
'c' : '3',
'd' : ''}
def __init__(self, **kw):
self.site_vars=self.base_vars.copy()
self.site_vars.update(kw)
def __str__(self):
site=str(self.site_vars.values())
return site
so:
Code: Alles auswählen
__slots__
ich frage mich schön langsam, ob das oop design in python irgendwie eine halbe sache ist.
Code: Alles auswählen
>>> g=Test()
>>> print g
['1', '3', '2', '']
Code: Alles auswählen
>>> t.new_site_vars={'a':'2','b':'3'}
Traceback (most recent call last):
File "<pyshell#6>", line 1, in -toplevel-
t.new_site_vars={'a':'2','b':'3'}
AttributeError: 'Test' object has no attribute 'new_site_vars'
Code: Alles auswählen
>>> Test.site_vars={'a':'shit','b':'bringts das'}
>>> print t
['shit', 'bringts das']
>>>
Code: Alles auswählen
__slots__
mfg
rolgal
Code: Alles auswählen
ach so, das geht natürlich auch:
mfg
rolgal
Code: Alles auswählen
>>> Test.new_site_vars={'a':'geht auch','b':'super oder?'}
>>> print t
['shit', 'bringts das']
>>> print t.new_site_vars
{'a': 'geht auch', 'b': 'super oder?'}
>>>
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi rolgal,
da wirfst Du jetzt 2 Sachen durcheinander.
Test.site_vars ist ein veränderbares Attribut. Wenn Du es noch mehr schützen willst mach es so:
Natürlich kannst Du das Dictionary self.site_vars immer noch manipulieren, ist ja ein Mutable Object. Aber du kannst jetzt sitevars keinen Wert direkt zuweisen.
Gruß
Dookie
da wirfst Du jetzt 2 Sachen durcheinander.
Test.site_vars ist ein veränderbares Attribut. Wenn Du es noch mehr schützen willst mach es so:
Code: Alles auswählen
#!/usr/local/bin/python
class Test(object):
__slots__=['__site_vars']
def site_vars(self):
return self.__site_vars
site_vars = property(site_vars, doc="readonly")
base_vars={'a' : '1',
'b' : '2',
'c' : '3',
'd' : ''}
def __init__(self, **kw):
self.__site_vars=self.base_vars.copy()
self.__site_vars.update(kw)
def __str__(self):
site=str(self.site_vars.values())
return site
Gruß
Dookie
hi
bevor ich mich auf dein neues bsp. stürze:
sollte instanzen davor schützen, dass ihnen keinen neue attribute zugewiesen werden können zur laufzeit, bzw. die werte nicht verändert werden können.
es steht die frage an, wie gut und sinnvoll das implementiert wurde, wenn ich über die klasse die instanz erreichen kann.
denn: die klasse muss ich ja immer kennen, oder?
mfg
rolgal[/code][/quote]
bevor ich mich auf dein neues bsp. stürze:
Code: Alles auswählen
__slots__
es steht die frage an, wie gut und sinnvoll das implementiert wurde, wenn ich über die klasse die instanz erreichen kann.
denn: die klasse muss ich ja immer kennen, oder?
mfg
rolgal[/code][/quote]
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Bei deinem 2. Beispiel manipulierst Du nicht die Instanz sondern die Klasse. mach ne 2. Instanz, und über diese kannst Du dann auch auf new_sitevars zugreiffen, diese hat aber wieder den gleichen Inhalt für alle Instanzen.
Dies liesse sich über Metaclassen unterbinden, sollte aber bei vernünftigen Programmierern nicht nötig sein
Im übrigen reichts eine Basisklasse zu kennen, Abgeleitete Klassen können dann genau wie die Basisklasse verwendet werden, siehe z.B. boole.
Gruß
Dookie
Dies liesse sich über Metaclassen unterbinden, sollte aber bei vernünftigen Programmierern nicht nötig sein
Im übrigen reichts eine Basisklasse zu kennen, Abgeleitete Klassen können dann genau wie die Basisklasse verwendet werden, siehe z.B. boole.
Gruß
Dookie
hi dookie!
interessant und verwirrend ist, dass dasselbe bsp im old style, tatsächlich nur die klasse ändert und die objekte nicht drauf reagieren. ich dachte zuerst, dass das mit ganz was anderem zu tun hat, dass die instanzen der new style klassen reagieren.
war ein irrtum. in momentaner verwirrung muss ich zu dem schlusss kommen :
wer objekte und klasse dynamsich ändern will und will dass die objekte drauf reagieren muss __slots__ verwenden.
allerdings ist auch interessant, dass er keine neue instanz anlegen lässt.
ganz anders verhalten sich die instanzen hier:
siehst was ich meine? im ersten bsp. haben sich die objekte angepasst, im zweiten nicht.
fördert für unvernünfige programmierer die dynamische änderung
ganz offensichtlich hat mit dem einfluss auf die kopie von
zu tun, denn:
führt dann doch zu dem ergebnis wie bei der new_style klasse:
lol, dann ist ja für nichts gut.
sorry, der stoff ist so trocken ich muss das mit etwas humor angehen, es ist ja schliesslich auch sonntag.
mfg
rolgal
mfg
rolgal
interessant und verwirrend ist, dass dasselbe bsp im old style, tatsächlich nur die klasse ändert und die objekte nicht drauf reagieren. ich dachte zuerst, dass das mit ganz was anderem zu tun hat, dass die instanzen der new style klassen reagieren.
war ein irrtum. in momentaner verwirrung muss ich zu dem schlusss kommen :
wer objekte und klasse dynamsich ändern will und will dass die objekte drauf reagieren muss __slots__ verwenden.
Code: Alles auswählen
#!/usr/local/bin/python
class Test(object):
__slots__=['site_vars']
base_vars={'a' : '1',
'b' : '2',
'c' : '3',
'd' : ''}
def __init__(self, **kw):
self.site_vars=self.base_vars.copy()
self.site_vars.update(kw)
def __str__(self):
site=str(self.site_vars.values())
return site
Code: Alles auswählen
>>> t=Test()
>>> u=Test()
>>> print t
['1', '3', '2', '']
>>> print u
['1', '3', '2', '']
>>> Test.site_vars={'a':'geandert','b':'auch geaendert'}
>>> print t
['geandert', 'auch geaendert']
>>> print u
['geandert', 'auch geaendert']
>>> v=Test()
Traceback (most recent call last):
File "<pyshell#7>", line 1, in -toplevel-
v=Test()
File "/home/rolgal/polen/python/new_style_class_a.py", line 12, in __init__
self.site_vars=self.base_vars.copy()
AttributeError: 'Test' object attribute 'site_vars' is read-only
>>> Test.new_site_vars={'a':'und wieder','b':'so ein spass'}
>>> print t
['geandert', 'auch geaendert']
>>> print u
['geandert', 'auch geaendert']
>>> print u.new_site_vars
{'a': 'und wieder', 'b': 'so ein spass'}
ganz anders verhalten sich die instanzen hier:
Code: Alles auswählen
#!/usr/local/bin/python
class Test:
base_vars={'a':'1',
'b':'2',
'c':'3',
'd':''}
def __init__(self, **kw):
self.site_vars=self.base_vars.copy()
self.site_vars.update(kw)
def __str__(self):
site=str(self.site_vars.values())
return site
Code: Alles auswählen
>>> t=Test()
>>> u=Test()
>>> print t
['1', '3', '2', '']
>>> print u
['1', '3', '2', '']
>>> Test.site_vars={'a':'geandert','b':'auch geaendert'}
>>> print t
['1', '3', '2', '']
>>> print u
['1', '3', '2', '']
Code: Alles auswählen
__slots__
ganz offensichtlich hat
Code: Alles auswählen
__slots__
Code: Alles auswählen
base_vars
Code: Alles auswählen
#!/usr/local/bin/python
class Test:
base_vars={'a':'1',
'b':'2',
'c':'3',
'd':''}
def __init__(self, **kw):
self.base_vars.update(kw)
def __str__(self):
site=str(self.base_vars.values())
return site
Code: Alles auswählen
>>> t=Test()
>>> u=Test()
>>> print t
['1', '3', '2', '']
>>> print u
['1', '3', '2', '']
>>> Test.base_vars={'a':'geandert','b':'auch geandert'}
>>> print t
['geandert', 'auch geandert']
>>> print u
['geandert', 'auch geandert']
>>>
Code: Alles auswählen
__slots__
sorry, der stoff ist so trocken ich muss das mit etwas humor angehen, es ist ja schliesslich auch sonntag.
mfg
rolgal
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
Hi,
der Zugriff ist bei newstyle Klassen ein anderer als der auf oldstyle Klassen. Auch ein Grund Klassen und Intanzen nicht von aussen auf diese Weise zu ändern, da es gänzlich andere Ergebnisse liefert.
Du änderst keine Objekte sondern die Klasse mit Deinem Beispiel!
Klassen sind bei New-Style auch Objekte.
Gruß
Dookie
der Zugriff ist bei newstyle Klassen ein anderer als der auf oldstyle Klassen. Auch ein Grund Klassen und Intanzen nicht von aussen auf diese Weise zu ändern, da es gänzlich andere Ergebnisse liefert.
Du änderst keine Objekte sondern die Klasse mit Deinem Beispiel!
Klassen sind bei New-Style auch Objekte.
Gruß
Dookie
???
aber die objekte sind auch geändert, oder nicht?
ausser bei dem bsp. der old_style klasse mit dem selben konstruktor, wie ihn die new_style klasse hat.
mfg
rolgal
aber die objekte sind auch geändert, oder nicht?
ausser bei dem bsp. der old_style klasse mit dem selben konstruktor, wie ihn die new_style klasse hat.
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
!!!
nö eben nicht, es sind die Klassenattribute die du änderst, nicht die Objekte.
Über die Objekte kannst Du natürlich dann auf die geänderten Klassenattribute zugreifen.
Klassen sind die Beschreibung um Objekte(Instanzen) zu erzeugen. Objekte sind mit Hilfe der Beschreibung in der Klasse erzeugte Konkrete "Objekte" eben.
Objekte von Oldstyle Klassen oder Newstyle Klassen ohne __slots__ haben ein Attribut __dict__ in dem die Attribute und Methoden in einem Dictionary festgehalten sind. Über __dict__ erfolgt dann der Zugriff auf die Attribute und Methoden.
Objekte von Newstyle Klassen mit __slots__ haben kein Attribut __dict__ und der Zugriff auf Attribute und Methoden erfolgt anders, wie braucht hier nicht zu Interessieren ist aber in der Pythondocumentation zu Newstyle Klassen beschrieben, kann sich aber bei Python 3.x oder 4.x wieder total ändern, darum brauchts nicht zu interessieren.
Gruß
Dookie
nö eben nicht, es sind die Klassenattribute die du änderst, nicht die Objekte.
Über die Objekte kannst Du natürlich dann auf die geänderten Klassenattribute zugreifen.
Klassen sind die Beschreibung um Objekte(Instanzen) zu erzeugen. Objekte sind mit Hilfe der Beschreibung in der Klasse erzeugte Konkrete "Objekte" eben.
Objekte von Oldstyle Klassen oder Newstyle Klassen ohne __slots__ haben ein Attribut __dict__ in dem die Attribute und Methoden in einem Dictionary festgehalten sind. Über __dict__ erfolgt dann der Zugriff auf die Attribute und Methoden.
Objekte von Newstyle Klassen mit __slots__ haben kein Attribut __dict__ und der Zugriff auf Attribute und Methoden erfolgt anders, wie braucht hier nicht zu Interessieren ist aber in der Pythondocumentation zu Newstyle Klassen beschrieben, kann sich aber bei Python 3.x oder 4.x wieder total ändern, darum brauchts nicht zu interessieren.
Gruß
Dookie
hi
ist
ein verweis auf ein objekt, ja oder nein?
ja. wenn ich nun die klassenattribute so ändere, dass beim aufruf von
diese neue klassenattribute zur verfügung stehen, dann verweist wohl a auf ein objekt mit den geänderten attributen. also ist das objekt geändert.
mfg
rolgal
ist
Code: Alles auswählen
a=A()
ja. wenn ich nun die klassenattribute so ändere, dass beim aufruf von
Code: Alles auswählen
print a
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
hi auch,
so wird ein neues Klassenattribut erzeugt und Klassenattribute sind sowohl über die Klasse als auch über die Instanzen zugreifbar und in den genannten Fällen wird auf ein und das selbe Attribut zugegriffen das auch für alle Instanzen und die Klasse den gleichen Wert hat.
Gruß
Dookie
Code: Alles auswählen
a = A()
A.cattr = "Hallo"
print "A sagt:", A.cattr
print "a sagt auch:", a.cattr
b = A()
print "b sagt, na was wohl:", b.cattr
Gruß
Dookie
hi dookie!
äh, ich weiss eigentlich nicht was du mir jetzt klar machen wolltest.
was du mir zeigst ist vollkommen klar. ich sagte ja: ich ändere die klassen!!! erreiche aber daurch auch die angelegten instanzen und je nach bsp hat es sich ausgewirkt oder nicht!
eben auch im falle von hat es sich auf die instanzen, den attributen der instanzen ausgewirkt, wenn dir diese formulierung lieber ist.
logisch, dass ich als schutzmechanismus in der von dir erklärten form in frage stelle.
pythons oop konzept ist offen. warum konnte noch immer nicht geklärt werden.
mfg
rolgal
äh, ich weiss eigentlich nicht was du mir jetzt klar machen wolltest.
was du mir zeigst ist vollkommen klar. ich sagte ja: ich ändere die klassen!!! erreiche aber daurch auch die angelegten instanzen und je nach bsp hat es sich ausgewirkt oder nicht!
eben auch im falle von
Code: Alles auswählen
__slots__
logisch, dass ich
Code: Alles auswählen
__slots__
pythons oop konzept ist offen. warum konnte noch immer nicht geklärt werden.
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
ich wollte dir klar machen, daß du klassenattribute und attribute von instanzen, auch wenn beim lesenden Zugriff scheinbar kein Unterschied ist, dieses doch 2 völlig verschiedene Sachen sind.
Du erreichst keine Instanzen indem du Klassenattribute änderst, sondern über die Instanzen hast du zugriff auf Klassenattribute!!!
Solange dir dieses nicht klar ist, ist eine weitere Diskussion sinnlos.
Gruß
Dookie
Du erreichst keine Instanzen indem du Klassenattribute änderst, sondern über die Instanzen hast du zugriff auf Klassenattribute!!!
Solange dir dieses nicht klar ist, ist eine weitere Diskussion sinnlos.
Gruß
Dookie
also gut!
klasse A. attribut - wert
instanz a greit auf diesen wert zu.
klasse A. attribut - geänderter wert.
instanz a greift auf diesen wert zu.
der ursprgl. wert ist nicht mehr erreichbar.
somit repräsentiert der verweis a ein objekt mit einem attribut dessen wert geändert wurde.
was stimmt daran nicht?
ob du es von dieser seite oder jener seite angehst: fakt ist, beim aufruf a.attribut, kommt nach der änderung der geänderte wert.
mfg
rolgal
klasse A. attribut - wert
instanz a greit auf diesen wert zu.
klasse A. attribut - geänderter wert.
instanz a greift auf diesen wert zu.
der ursprgl. wert ist nicht mehr erreichbar.
somit repräsentiert der verweis a ein objekt mit einem attribut dessen wert geändert wurde.
was stimmt daran nicht?
ob du es von dieser seite oder jener seite angehst: fakt ist, beim aufruf a.attribut, kommt nach der änderung der geänderte wert.
mfg
rolgal
-
- Python-Forum Veteran
- Beiträge: 2010
- Registriert: Freitag 11. Oktober 2002, 18:00
- Wohnort: Salzburg
- Kontaktdaten:
was daran nicht stimmt ist, das A.irgendwas kein attribut von a sondern ein attribut von A ist, a.irgendwas wird zu A.irgendwas umgeleitet. Funktioniert also wie ein Alias. Und es ist nicht egal von welcher Seite du es siehst, wenn Du in einen Lautsprecher reinsingst, kommt beim Microfon ja auch kein Ton heraus.
Gruß
Dookie
Gruß
Dookie
Hi. Du sagst es: Verweise, Referenzen. Es sind nun mal Klassenatrribute und die sind für alle Instanzen immer gleich. Das durch Eingriffe darin rumgepfuscht werden kann ist klar und deswegen auch, dass man darauf aufpassen sollte (nun merkst du ja selber warum). Es herrscht Identität zwischen Klassenattributen.
Deswegen hat das auch gar nix mit __slots__ zu tun, da das nur dafür da ist, das keine neuen Attribute hinzugefügt werden können, es schützt nicht vor Änderung bestehender Attribute (wie du in der Docu lesen kannst).
Warum du nun also schreibenden Zugriff auf die Klassenattribute hast, musst du die Pythonentwickler fragen. Es ist jedenfalls in der Sprachphilosophie verankert, dass man offener zugreifen darf als anderswo. Das war auch der Grund, wesegen Dookie und ich stark gegen einen offenen Zugriff aus "Lust und Laune" argumentiert haben, wenn es nicht anders geht. Hier könntest du aber auch eine große Ausnahme machen, wenn du a) den Quellcode kennst und b) gerade diese Identität als nützliches Mittel erwünscht ist. Man kann damit technische Kunstgriffe machen, sollte es aber als Ausnahme behandeln und möglichst andere Wege gehen.
Milan
Deswegen hat das auch gar nix mit __slots__ zu tun, da das nur dafür da ist, das keine neuen Attribute hinzugefügt werden können, es schützt nicht vor Änderung bestehender Attribute (wie du in der Docu lesen kannst).
Warum du nun also schreibenden Zugriff auf die Klassenattribute hast, musst du die Pythonentwickler fragen. Es ist jedenfalls in der Sprachphilosophie verankert, dass man offener zugreifen darf als anderswo. Das war auch der Grund, wesegen Dookie und ich stark gegen einen offenen Zugriff aus "Lust und Laune" argumentiert haben, wenn es nicht anders geht. Hier könntest du aber auch eine große Ausnahme machen, wenn du a) den Quellcode kennst und b) gerade diese Identität als nützliches Mittel erwünscht ist. Man kann damit technische Kunstgriffe machen, sollte es aber als Ausnahme behandeln und möglichst andere Wege gehen.
Milan
du hast schon recht, dass ich das genauer formulieren muss.
das ergebnis ist im gegensatz zu deinem vergleich mit dem lautsprecher doch das gleiche.
a.attribut gibt mir das zurück was ich in der klasse definiert habe.
warum also __slots__ wenn, abgesehen davon ob es sinn macht oder nicht, ich das was a.attribut zurückgibt so leicht beeinflussen kann.
ist das so unklar was ich meine ?
wenn ich etwas implementiere um es zu schützen, dann muss ich es schon richtig dicht machen.
mir kommt __slots__ (ist ja für was anderes auch noch gut) so vor, als würde ich meine gitarre in einen koffer sperren und auf den koffer draufschreiben wo der schlüssel ist.
oder so ähnlich.
mfg
rolgal
das ergebnis ist im gegensatz zu deinem vergleich mit dem lautsprecher doch das gleiche.
a.attribut gibt mir das zurück was ich in der klasse definiert habe.
warum also __slots__ wenn, abgesehen davon ob es sinn macht oder nicht, ich das was a.attribut zurückgibt so leicht beeinflussen kann.
ist das so unklar was ich meine ?
wenn ich etwas implementiere um es zu schützen, dann muss ich es schon richtig dicht machen.
mir kommt __slots__ (ist ja für was anderes auch noch gut) so vor, als würde ich meine gitarre in einen koffer sperren und auf den koffer draufschreiben wo der schlüssel ist.
oder so ähnlich.
mfg
rolgal