我创建了以下空类A和该类的实例a

>>> class A:
...     pass
...
>>> a = A()


据我了解,省略基类会导致该类继承自object。我试图用以下方法验证这一点:

>>> a.__class__.__bases__
(<class 'object'>,)


因此,我还创建了object的实例:

>>> b = object()


但是,比较ab时,我注意到使用dir获取每个对象的属性会导致ab的列表不同:

>>> dir(a)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
>>> dir(b)
['__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__']


a包含b中的每个属性,另外还有三个。仅在a中找到的其他属性是:

>>> set(dir(a)).difference(set(dir(b)))
{'__module__', '__dict__', '__weakref__'}


如果类A为空并从object继承,它们从何而来?

最佳答案

即使A为空,它仍然是用户定义的类,它与object(必须由实现定义的类)有一些明显的区别。

关于python - 空类的实例和对象的实例之间的区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59566440/

10-09 20:15