"Объект класса" печатает свое имя, используя `.__name__`, несмотря на отсутствие атрибута`__name__`

Имя класса_объекта доступно через .__name__Смотрите коды:

>>> object
<class 'object'>
>>> object.__name__
'object'

Тем не менее, __name__ метод isnotin настройка по умолчанию для class_object.

коды:

>>> foo = dir(object)
>>> foo
['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
>>> foo.count('__name__')
0    # '__name__' is not in list

Объект является основой для всех классов. У него есть методы, которые являются общими для всех экземпляров классов Python.

куда __name__настройка находится в?

2 ответа

Решение

После выполнения тела класса Python автоматически заполнит некоторые атрибуты. Это включает __name__ но также __doc__, __qualname__ (Python 3.4+) и __module__, Полный список этих автоматических атрибутов доступен в виде таблицы в inspect документация модуля:

Type    Attribute       Description
class   __doc__         documentation string
        __name__        name with which this class was defined
        __qualname__    qualified name
        __module__      name of module in which this class was defined

Они определяются базовым метаклассом классов Python: type (см. также ответ @Szabolcs).

>>> '__name__' in dir(object.__class__)
True

Что ж object построен с type так что вы можете найти __name__ в dir(type):

>>> '__name__' in dir(type)
True

Документы: https://docs.python.org/2/library/functions.html

Другие вопросы по тегам