[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