为什么实例不能从类继承属性?

时间:2019-11-11 03:03:04

标签: python class

我的代码如下:

class Ball(object):
    pass
ball = Ball()
dir(ball) == dir(Ball) # True
Ball.__name__ # Ball
ball.__name__ # error

为什么ball没有__name__的{​​{1}}?

2 个答案:

答案 0 :(得分:0)

__name__是自动在类上可用的对象,而不是对象。 Custom classes have a

  

特殊属性:__name__是类名…

而类实例没有:

  

特殊属性:__dict__是属性字典; __class__是实例的类。

尝试

ball.__class__.__name__

答案 1 :(得分:0)

访问Ball时,它会访问。 class 中的属性,要从该类的实例访问名称,您必须使用class运算符,因此使用ball。 class 名称

In [591]: dir(Ball.__class__)                                                                                                                                                                              
Out[591]: 
['__abstractmethods__',
 '__base__',
 '__bases__',
 '__basicsize__',
 '__call__',
 '__class__',
 '__delattr__',
 '__dict__',
 '__dictoffset__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__flags__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__gt__',
 '__hash__',
 '__init__',
 '__init_subclass__',
 '__instancecheck__',
 '__itemsize__',
 '__le__',
 '__lt__',
 '__module__',
 '__mro__',
 '__name__',
 '__ne__',
 '__new__',
 '__prepare__',
 '__qualname__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasscheck__',
 '__subclasses__',
 '__subclasshook__',
 '__text_signature__',
 '__weakrefoffset__',
 'mro']