On Sun, Apr 30, 2006 at 11:55:03AM -0700, UnrealEd wrote: > ok, bedankt. > er is dus niet echt een manier om een variabele "behoorlijk" te definieren, > behalve door hem een lege waarde mee te geven?
Door in de constructor vast de variabelen te definieren, vind ik het soms wel wat handiger worden. Ik zou ze zelf dan eerder op 'None' zetten. Als je een hoop info in arrays of dicts wil gaan opslaan, zou ik die vast leeg initialiseren (dus met [], {}, of list() en dict()). Mijn logica hierachter is dat als je voor de gebruiker een dictionary opslaat, dan initialiseer je 'm niet per se als zodanig. Als de gebruiker (van je class) bijv. string=value kan aangeven, dan ben ik voorbereid met een dictionary. Dus class Configuration, met config.set(key, val) heeft in de __init__ een self.data = dict(). Class Storage daarentegen met storage.saveDict(dict) heeft in de __init__ een self.dictdata = None. Maar goed, dat gaat meer op gevoel denk ik. > dus eigenlijk hoef ik dit nergens te doen? toch een tegenvoorbeeldje: als ik > een multidimensionele dictionary aanmaak, dan krijg ik een error als ik de > variabele niet op van tevoren heb gedefinieerd, wat normaal is. als ik > ervoor dan zet: a = dict, dan werkt het wel, hoewel ik volgens je uitleg een > functie aanroep. of maakt dat geen verschil. Even interactief: >>> a = dict >>> a <type 'dict'> >>> a = dict() >>> a {} Had je niet a = dict() gedaan? Dict is een functie die de argumenten als dictionary terug geeft. >>> b = dict(a=3, b=1) {'a': 3, 'b': 4} > en waarom maakt het uit of ik een methode heb die dezelfde naam heeft als > een variabele in dezelfde class (inmijn geval self.income en self.income() ) > ? of ligt dat aan hetzelfde? Weer interactief: >>> class X: ... def __init__(self): ... self.income = 3 ... def income(self): ... return 5 ... >>> x =X() >>> x.__dict__ {'income': 3} >>> x.__class__.__dict__ {'__module__': '__main__', '__doc__': None, '__init__': <function __init__ at 0x40220f7c>, 'income': <function income at 0x40220fb4>} Wat je dus kunt zien dat object 'x' een attribuut income heeft, met daarin nu het getal 3. De class van x heeft ook attributen, een ervan heeft ook 'income', en dat is een functie. Dus welke wordt gebruikt? >>> x.income 3 Eerst wordt bij het object of er een attribuut 'income' is. Die is er, dus klaar. >>> x.income() Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: 'int' object is not callable Dit moet je dus lezen als (x.income) (). Nog steeds wordt 3 opgehaald, en dan wordt geprobeerd om die aan te roepen (door de ()). Het 'int' object heeft hier geen ondersteuning voor, dus krijg je deze error. Je hebt dus geen eenvoudige mogelijkheid meer om de functie income() aan te roepen. Groet, Chris _______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl