這是舊樣式對象(從無從繼承)的情況。這些對象不具有__class__
屬性。我認爲他們這樣做是爲了防止錯誤。用於Python 2.7實施例:
class A:
pass
class B(object):
pass
a = A()
b = B()
print(dir(a)) # ['__doc__', '__module__']
print(dir(b)) # ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
print(b.__class__) # <class '__main__.B'>
print(type(b)) # <class '__main__.B'>
#####################
# The intersting part
print(a.__class__) # __main__.A
print(type(a)) # <type 'instance'>
print(B.__class__) # <type 'type'>
print(type(B)) # <type 'type'>
print(type(A)) # <type 'classobj'>
#print(A.__class__) # AttributeError: class A has no attribute '__class__'
進一步信息請參閱本:
注:從CPython的給定的行被改變在2008上一次(commit),所以它似乎確實是一個兼容性的東西,或者他們只是忘了它。
可能的重複http://stackoverflow.com/questions/9610993/python-type-or-class-or-is – Kasramvd
@Kasramvd感謝您的鏈接,我相信它可能是http:// stackoverflow的重複。 COM /問題/ 1060499 /差間typeobj-和對象類。我不確定爲什麼他們在提問時沒有出現,在提出問題時也沒有出現在「提出的重複內容」中。 – MSeifert
是的,有時候會發生這種情況;) – Kasramvd