On Tue, Nov 26, 2013 at 6:13 AM, Dominik George <n...@naturalnet.de> wrote: > Now when zou instantiate the class, then the dictionary is copied to the > instance (carying references to the same data inside it, mind you!),
Perhaps the above is just a simple mistake of wording, but to be clear, the class dict isn't copied to an instance. >>> class Animal(object): # extend object!!! ... flag = True ... >>> a = Animal() >>> Animal.__dict__['flag'] True >>> a.__dict__ # or vars(a) {} The generic object __getattribute__ (tp_getattro slot in the C implementation) looks in the dicts of the type and its bases, i.e. the types in the MRO: >>> class Dog(Animal): ... flag = False ... >>> Dog.__mro__ (<class '__main__.Dog'>, <class '__main__.Animal'>, <type 'object'>) The order of possible return values is as follows: * a data-descriptor class attribute (e.g. a property): return the result of its __get__ method * an instance attribute * a non-data descriptor class attribute (e.g. a function): return the result of its __get__ method (e.g. return a bound instance method) * a non-descriptor class attribute If the attribute isn't found it raises an AttributeError. If you implement the fallback __getattr__ method, the AttributeError is swallowed and the onus is on you. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor