"Объект класса" печатает свое имя, используя `.__name__`, несмотря на отсутствие атрибута`__name__`
Имя класса_объекта доступно через .__name__
Смотрите коды:
>>> object
<class 'object'>
>>> object.__name__
'object'
Тем не менее, __name__
метод is
not
in
настройка по умолчанию для 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