[Python-de] Definition von Klassen
robert rottermann
robert at redcor.ch
Son Apr 9 18:43:58 CEST 2006
Pascal Dreisbach wrote:
> Hallo!
>
> Ich bin gerade dabei, mir mit Hilfe von Python als Anfänger das
> objektorientierte Programmieren etwas näher zu bringen.
>
> Neben dem Lesen von Büchern und zahlreichen Online-Hilfen, probiere ich
> mich an einem kleinen Server/Client Projekt.
>
> Was ich aktuell nicht ganz verstehe, ist der Unterschied zwischen
> folgenden zwei Definitionen:
>
> >>>
> class MyClass:
> x=1
>
> def __init__(self):
> pass
> <<<
> >>>
> class MyClass:
>
> def __init__(self):
> self.x=1
> <<<
>
> Im ersten Fall wird x als Klassenattribut beschrieben, im zweiten Fall
> soll es ein Objektattribut sein?
>
> Aber kann nicht beides über
> >>>
> klasse = MyClass()
> print klasse.x
> <<<
> angesprochen werden?
>
> Für euch sicher eine Kleinigkeit, mir das mal kurz zu erklären.
>
sowohl ein eine klasse als auch eine instanz haben (je) ein attibut
__dict__ das alle klassen bzw instanzvariabeln speichert.
beim zugriff auf ein attribut sucht python zuerst im __dict__ der
instanz ob es fündig wird.
du kannst das selbst überprüfen
Python 2.3.5 (#3, Jun 7 2005, 06:49:54)
[GCC 3.3.5 20050117 (prerelease) (SUSE Linux)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> class C:
... classattr='classattr'
...
>>> C.__dict__
{'classattr': 'classattr', '__module__': '__main__', '__doc__': None}
>>> c=C()
>>> c.instanceattr='instanceattr'
>>> c.__dict__
{'instanceattr': 'instanceattr'}
>>> dir(c)
['__doc__', '__module__', 'classattr', 'instanceattr']
>>> dir(C)
['__doc__', '__module__', 'classattr']
robert
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname : robert.vcf
Dateityp : text/x-vcard
Dateigröße : 200 bytes
Beschreibung: nicht verfügbar
URL : http://python.net/pipermail/python-de/attachments/20060409/234e4dcd/robert.vcf