__class__ , for example:
>>> class Test(object): __dict__ = {'__class__' : "dict of Test"} def __init__(self): self.__dict__['__class__'] = "dict of test" >>> test = Test() >>> test.__class__ <class '__main__.Test'> >>> test.__dict__ {'__class__': 'dict of test'} >>> Test.__dict__ dict_proxy({'__dict__': {'__class__': 'dict of test'}, '__module__': '__main__', '__weakref__': <attribute '__weakref__' of 'Test' objects>, '__doc__': None, '__init__': <function __init__ at 0x02BD2770>}) >>>
equivalent in old-style classes:
>>> class Test: pass >>> Test.__dict__["__class__"] = "spam" >>> test = Test() >>> test.__class__ <class __main__.Test at 0x02BD1110> >>> test.__dict__ = {'__class__': "foo"} >>> test.__class__ <class __main__.Test at 0x02BD1110>
but
>>> test.__dict__ = {'__lolcat__': "bar"} >>> test.__lolcat__ 'bar'
Depending on the type of object, there are many more special attribute names. For example, functions:
>>> def test():pass >>> dir(test) ['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] >>> test.func_closure >>> test.__dict__['func_closure']='roflcopter' >>> test.func_closure >>> test.__dict__['foo']='bar' >>> test.foo 'bar'
see http://docs.python.org/reference/datamodel.html for a review