2009-08-06 31 views
48

在Python中創建一個類時,它可以繼承自對象,這是我所瞭解的一種特殊的內置python元素,它允許你的對象成爲一個新的對象。從Python 3.x中的Python對象繼承是否有必要或有用?

那麼新版本(> 3.0和2.6)呢?我搜索關於類對象,但我得到如此多的結果(出於一個明顯的原因)。任何提示?

謝謝!

+2

如果您的代碼也將在2.x下使用,那麼很明確。 – smci 2011-08-24 18:18:28

回答

39

你不需要繼承object在python 3中有新的風格。所有的類都是新風格的。

+0

謝謝:)我翻閱網上的書(Pyhton的一個字節)和很多pyhton的文檔,但從來沒有清楚地發現我的答案... – thomas 2009-08-06 12:55:27

+0

Python 2.6怎麼樣? – luc 2009-09-02 10:05:40

+3

python 2.6的行爲像python 2.x – SilentGhost 2009-09-02 10:14:22

22

我意識到這是一個老問題,但值得注意的是,即使在python 3中,這兩件事情也不是完全相同的東西。

如果您明確從object繼承,那麼您實際上所做的是從builtins.object繼承,不管當時指向什麼。

因此,我可能有一些(非常古怪)模塊,因爲某種原因覆蓋了對象。在其他一些文件( 「klasses.py」)

import builtins 

old_object = builtins.object # otherwise cyclic dependencies 

class new_object(old_object): 

    def __init__(self, *args, **kwargs): 
     super(new_object, self).__init__(*args, **kwargs) 
     self.greeting = "Hello World!" 

builtins.object = new_object #overrides the default object 

然後:

class Greeter(object): 
    pass 

class NonGreeter: 
    pass 

然後在第三個文件(我們實際上可以我們稱這個第一模塊 「newobj.py」運行):

import newobj, klasses # This order matters! 

greeter = klasses.Greeter() 
print(greeter.greeting) # prints the greeting in the new __init__ 

non_greeter = klasses.NonGreeter() 
print(non_greeter.greeting) # throws an attribute error 

所以你可以看到,在其被明確地從對象繼承的情況下,我們得到的比,你允許隱式繼承一個不同的行爲。

+4

Upvote for瘋狂!令人驚歎的想法! – 2017-10-09 17:03:17