On Thu, Jan 2, 2014 at 5:12 AM, spir <denis.s...@gmail.com> wrote: > > Am I missing something or don't classes know how they're called (unlike > funcs, which have a __name__ attribute, very practicle)? Is there a way to > get it otherwise?
What are you smoking, and where can I get some? ;) Actually, I think I understand the source of your confusion. `dir` doesn't show attributes from the metaclass because that would be too confusing. __class__ is a descriptor in the dict of `type`: >>> name = vars(type)['__name__'] >>> type(name) <class 'getset_descriptor'> >>> class C: pass ... >>> name.__get__(C) 'C' For a heap type, the getter can just return the Python object `ht_name`. For a built-in type it has to construct a Unicode string (assuming 3.x) from the `tp_name` slot. The setter (`type_set_name`) won't let you change the name of a built-in type. It also has to ensure that the name doesn't contain a null: >>> name.__set__(C, 'GoodName') >>> C.__name__ 'GoodName' >>> name.__set__(int, 'float') Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't set int.__name__ >>> name.__set__(C, 'Bad\x00Name') Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: __name__ must not contain null bytes >>> name.__set__(C, 'Really Weird Name') >>> C.__name__ 'Really Weird Name' _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor