Python類繼承物件

2021-10-01 10:14:17 字數 3644 閱讀 7312

類宣告從object繼承有什麼理由嗎?

我剛剛找到了執行此操作的**,但找不到很好的理由。

class myclass(object):

# class code follows...

難學python的歷史:

python最初對類的再現在許多方面都被破壞了。 到發現此故障時,已經為時已晚,他們必須予以支援。 為了解決此問題,他們需要某種「新類」樣式,以便「舊類」繼續工作,但是您可以使用更正確的新版本。

他們決定使用小寫的「物件」一詞作為繼承自您的「類」以構成乙個類。 這很令人困惑,但是乙個類繼承自名為「 object」的類來構成乙個類,但它實際上並不是乙個物件,而是乙個類,但不要忘記從object繼承。

也只是為了讓您知道新樣式類和舊樣式類之間的區別是,新樣式類始終從object類繼承或從從object繼承的另乙個類繼承:

class newstyle(object):

pass

另乙個示例是:

class anotherexampleofnewstyle(newstyle):

pass

雖然老式的基類如下所示:

class oldstyle():

pass

乙個老式的子類如下所示:

class oldstylesubclass(oldstyle):

pass

您可以看到,old style基類不會從任何其他類繼承,但是,old style類當然可以相互繼承。 從物件繼承可確保某些功能在每個python類中均可用。 python 2.2中引入了新樣式類

類建立語句的語法:

class (superclass):

#code follows

如果沒有您要特別繼承的其他任何超類,則該superclass應始終是object,它是python中所有類的根。

從技術上講,object是python中「新型」類的根。 但是,如今的新型類與唯一的類一樣好。

但是,如果在建立類時沒有顯式使用object一詞,則正如其他人提到的那樣,python 3.x隱式繼承自object超類。 但是我想顯式總是比隱式好(地獄)

參考是的,這是歷史性的 。 沒有它,它將建立乙個老式的類。

如果在舊式物件上使用type(),則只會得到「例項」。 在新型物件上,您可以得到其類。

是的,這是乙個「新樣式」物件。 這是python2.2中引入的功能。

新樣式物件與經典物件具有不同的物件模型,並且某些東西無法與舊樣式物件一起正常工作,例如super()@property和描述符。 有關什麼是新樣式類的詳細說明,請參見本文 。

so鏈結描述了這些差異: python中舊樣式類和新樣式類之間有什麼區別?

在python 3中,除了python 2和3之間的相容性之外, 沒有任何理由 。 在python 2中, 原因很多 。

在python 2.x(從2.2開始)中,有兩種樣式的類取決於作為基類的object的存在與否:

「經典」樣式類:它們沒有object作為基類:

>>> class classicspam: # no base class ... pass >>> classicspam.__bases__ ()

「新」樣式類:它們具有直接或間接 (例如,從內建型別繼承)的object作為基類:

>>> class newspam(object): # directly inherit from object ... pass >>> newspam.__bases__ (,) >>> class intspam(int): # indirectly inherit from object... ... pass >>> intspam.__bases__ (,) >>> intspam.__bases__[0].__bases__ # ... because int inherits from object (,)

毫無疑問,在編寫乙個類時,您總是想參加新式的類。 這樣做的好處很多,列舉其中一些:

如果您不繼承自object,請忘記這些。 可以在此處找到對以前的要點以及「新」樣式類的其他特權的更為詳盡的描述。

新型類的缺點之一是,類本身對記憶體的要求更高。 但是,除非您要建立許多類物件,否則我懷疑這將是乙個問題,並且它是乙個消極的消極情緒。

在python 3中,一切都得到了簡化。 僅存在新樣式的類(統稱為類),因此,新增object的唯一區別是您需要再輸入8個字元。 這個:

class classicspam:

pass

完全等效(除了它們的名稱:-)與此:

class newspam(object):

pass

並為此:

class spam():

pass

所有object__bases__都有object

>>> [object in cls.__bases__ for cls in ]

[true, true, true]

在python 2中:始終顯式繼承自object。 享受津貼。

在python 3中:如果您要編寫嘗試與python無關的**,則從object繼承,也就是說,它需要在python 2和python 3中都可以工作。否則,實際上並沒有什麼不同,因為python會將其插入您在幕後。

python 3

python 2

在python 3.x中定義基類時,可以從定義中刪除object。 但是,這可以為嚴重難以跟蹤的問題開啟大門。

python早在python 2.2中就引入了新樣式的類,而現在舊樣式的類確實非常老。 舊式類的討論包含在2.x文件中 ,而在3.x文件中則不存在。

問題在於,python 2.x中舊類的語法與python 3.x中新類的替代語法相同。 python 2.x仍被廣泛使用(例如gae,web2py),並且任何**(或編碼器)在不經意間將3.x樣式的類定義引入2.x**中都會導致一些嚴重過時的基礎物件。 而且由於老式的類不在任何人的注意範圍內,因此他們很可能不知道是什麼打擊了他們。

因此,只要把它弄清楚就行了,並省去一些2.x開發人員的眼淚。

python學習 物件導向 類 物件 繼承

約定成俗的類的命名方式 1 首字母大寫 2 為了與其他進行區分盡量避免使用 建議採用studenthomework小駝峰的格式 類的常規格式 class student 定義變數 資料成員 student sum 80 類變數 建構函式 def init self,name,age 其中的self....

python 類和物件之繼承

繼承 1 什麼是繼承?繼承的特點 繼承 object 頂級父類 python中所有的類都是直接繼承自object 繼承特點 1.子繼承父類,子類擁有父類的所有屬性和函式 2.子類繼承父類 子類可以具有自己獨有的屬性和函式,但是父類不可以使用子類獨有的的屬性和函式 3.子類繼承父類 子類可以重寫父類的...

Python中的類 物件 繼承

python中,類的命名使用帕斯卡命名方式,即首字母大寫。python中定義類的方式如下 class 類名 父類名 父類名 pass 省略父類名表示該類直接繼承自object,類的例項化如下 class person def init self pass person person init 是類的...