> I think it is misleading, because a class is actually an object.
This is only misleading *after* you know all the interesting details about Python and metaclasses. Prior to that, it is a reasonable and important distinction that I don't want to get lost in weasel words. The calls from object.__getattribute__ are different that those from type.__getattribute__. Likewise, data and non-data descriptors can only be described in terms of objects versus classes. Lastly, descriptors only work when stored in a class, if you store them in instances, they don't get invoked.