A. python 為什麼要繼承 object 類
python的類最好繼承object,繼承object 是新式類;如果不繼承object,屬於舊式類。 至於有哪些區別,你可以網路、google研究。 這么跟你說吧,你寫的所有類,盡量、最好都繼承object,可以避免一些不明所以的Bug。
B. Python 為什麼要繼承 object 類
繼承 object 類是新式類的寫法,經典類的可以不用繼承。
在python3中統一成繼承object類了,新式類優化了多繼承方法的搜索路徑及其它一些問題。
C. Python 為什麼要繼承 object 類
繼承 object 類的是新式類,不繼承 object 類的是經典類
2.2以前的時候type和object還不統一. 在2.2統一以後到3之間, 要用class Foo(object)來申明新式類, 因為他的type是 < type 'type' > .不然的話, 生成的類的type就是 < type 'classobj' >
Python2 里的新式類, 其特點如下:
low-level constructors named __new__() – 低級別的構造函數.
Note: Python 的 class __init__ 並不是其他語言意義上的構造函數,
在 new 創建實例後對實例屬性初始化的函數.
descriptors, a generalized way to customize attribute access – 描述符.
或者說描述符協議支持.descriptor protocol __get__, __set__ ,__delete__ 等,
可以閱讀 descriptor 文檔
static methods and class methods - 靜態方法和類方法
properties (computed attributes) – 屬性訪問 setter getter.
decorators (introced in Python 2.4) – 裝飾器.
現在裝飾器語法糖遍布各Python框架.
slots – 用戶設置後可以限定實例的屬性.
在 Python2 中替代 __dict__, 可以節省近 2/3 內存, Python3 中可以
不因為優化內存使用率而使用 slots, 因為 __dict__ 結構內存做了優化,
Note: __dict__ 並不是 Python 意義上的內置的 dict, 其實是一個 proxy 類.
a new Method Resolution Order (MRO) – MRO 方法解析次序改變
(由左遞歸改為C3演算法)
D. python在類中初始化另一個類
第一個問題:queryservice繼承了service,第一個問題處的意思是同樣把service里的init method原封不動繼承過來。沒有保存什麼值。
第二個問題:你用init初始化時後面的括弧里是self和request,而request你給的默認值是none,也就是說編譯完了用的時候,我可以QueryService(request='xxxx') 也可以直接QueryService()。而self.request = request的意思是把用戶輸入的request,也就是'xxx'保存到內部。
解釋的不太清楚,建議閱讀一下各種python書面向對象編程這塊,lz問的都是最基礎的問題
E. Python 為什麼要繼承 object 類
歷史遺留問題.2.2以前的時候type和object還不統一. 在2.2統一以後到3之間, 要用class
Foo(object)來申明新式類, 因為他的type是 < type 'type' > .不然的話, 生成的類的type就是
< type 'classobj' >
F. python中object基類到底有什麼用
基類就是所有對象的跟,這樣定義是有歷史原因的。
繼承了object的類是新式類,由於他們都是object的派生類,便於統一操作。py2由於一些類不繼承object,就弄了一些內置函數,兩種風格摻雜在一起很別扭。其實這點在動態語言裡面看不出優勢,在靜態類型的語言比如java之中優勢一目瞭然。