不加的叫做經典類或舊式類,但是現在python3的類都默認是繼承了object的,所以可寫可不寫
下面舉個例子說明:
首先說明下__class__功能與用法:
- __class__功能和type()函數一樣,都是查看對象所在的類。
- __class__可以套用
在python3的環境下運行:
#coding:utf-8 #不繼承 class Car(): pass #繼承 class Bag(object): pass if __name__ == "__main__": car = Car() bag = Bag() print('實例所在類') print(type(car)) print(type(bag)) print('類所在類') print(type(Car)) print(type(Bag)) print('實例所在類') print(car.__class__) print(bag.__class__) print(bag.__class__.__class__)#實例所在類所在的類 print('類所在類') print(Bag.__class__) print(Car.__class__) # 類的類型都是type
返回:
/Users/user/PycharmProjects/python3/venv/bin/python /Users/user/PycharmProjects/python3/test.py 實例所在類 <class '__main__.Car'> <class '__main__.Bag'> 類所在類 <class 'type'> <class 'type'> 實例所在類 <class '__main__.Car'> <class '__main__.Bag'> <class 'type'> 類所在類 <class 'type'> <class 'type'> Process finished with exit code 0
可見結果是一樣的,說明python3中有沒有繼承都一樣,因為底層已經幫你繼承了
如果我使用的是python2的環境來運行,返回內容為:
(deeplearning2) userdeMacBook-Pro:python3 user$ python test.py 實例所在類 <type 'instance'> <class '__main__.Bag'> 類所在類 <type 'classobj'> <type 'type'> 實例所在類 __main__.Car <class '__main__.Bag'> <type 'type'> 類所在類 <type 'type'> Traceback (most recent call last): File "test.py", line 28, in <module> print(Car.__class__) # 類的類型都是type AttributeError: class Car has no attribute '__class__'
⚠️python2不支持 類名.__class__
可見如果不繼承object,實例的類型為instance類,類的類型為classobj類
而繼承object的類,類的類型都是type類
除此之外還有一個區別就是內置函數的不同:
#coding:utf-8 #不繼承 class Car(): pass #繼承 class Bag(object): pass if __name__ == "__main__": car = Car() bag = Bag() print(dir(car)) print(dir(bag))
在python3中都是相同的,這里就不展示了。但是如果是在python2的環境下運行,返回:
(deeplearning2) userdeMacBook-Pro:python3 user$ python test.py ['__doc__', '__module__'] ['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__module__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
可見繼承了object類的類,有更多的內置函數可以使用,當你想要完成一些復雜操作的時候就很有用了
