'类对象'尽管没有`__name__`属性,但使用`.__ name__`打印其名称

时间:2017-08-11 11:20:05

标签: python

Class_object的名称可通过.__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

object是所有类的基础。它具有所有Python类实例共有的方法。

__name__的设置位于何处?

2 个答案:

答案 0 :(得分:6)

执行类主体后,Python会自动填充一些属性。其中包括__name__,还有__doc____qualname__(Python 3.4+)和__module__。这些自动属性的完整列表可以是table in the inspect module documentation

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 answer)。

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

答案 1 :(得分:1)

objecttype构建,因此您可以在__name__中找到dir(type)

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

文档:https://docs.python.org/2/library/functions.html#type