looks like instance data age ape illegalnot in __slots__ attributeerror'limiterobject has no attribute 'apethis feature is envisioned as both way to catch typo errors like this (assignments to illegal attribute names not in __slots__ are detectedas well as an optimization mechanism allocating namespace dictionary for every instance object can be expensive in terms of memory if many instances are created and only few attributes are required to save spaceinstead of allocating dictionary for each instancepython reserves just enough space in each instance to hold value for each slot attributealong with inherited attributes in the common class to manage slot access this might additionally speed executionthough this benefit is less clear and might vary per programplatformand python slots are also something of major break with python' core dynamic naturewhich dictates that any name may be created by assignment in factthey imitate +for efficiency at the expense of flexibilityand even have the potential to break some programs as we'll seeslots also come with plethora of special-case usage rules per python' own manualthey should not be used except in clearly warranted cases--they are difficult to use correctlyand areto quote the manualbest reserved for rare cases where there are large numbers of instances in memorycritical application in other wordsthis is yet another feature that should be used only if clearly warranted unfortunatelyslots seem to be showing up in python code much more often than they shouldtheir obscurity seems to be draw in itself as usualknowledge is your best ally in such thingsso let' take quick look here in python non-slots attribute space requirements have been reduced with key-sharing dictionary modelwhere the __dict__ dictionaries used for objectsattributes may share part of their internal storageincluding that of their keys this may lessen some of the value of __slots__ as an optimization toolper benchmark reportsthis change reduces memory use by to for object-oriented programsgives small improvement in speed for programs that create many similar objectsand may be optimized further in the future on the other handthis won' negate the presence of __slots__ in existing code you may need to understandslots and namespace dictionaries potential benefits asideslots can complicate the class model--and code that relies on it--substantially in factsome instances with slots may not have __dict__ attribute new-style class extensions