Class inheritance(類別繼承)
是物件導向編程(OOP)中一個重要的概念,它允許你建立新的類別,基於現有的類別(父類別或基類別)來定義新的類別(子類別或衍生類別)。子類別可以繼承父類別的屬性和方法,並且可以擴展或修改它們,同時還可以添加新的屬性和方法。
1.屬性和方法繼承: 子類別會繼承父類別的屬性和方法,這意味著你可以重用父類別中定義的程式碼。
2.擴展和修改: 子類別可以擴展或修改繼承的屬性和方法。這使得你可以根據需要自定義子類別的行為,
而不必重新實現所有內容。
3.新增屬性和方法: 你可以在子類別中添加新的屬性和方法,以滿足特定需求。
4.維護性和可讀性: 使用類別繼承可以提高程式碼的維護性和可讀性,因為相關的屬性和方法通常
位於同一個類別中。
5.資料表結構: 在使用 Class Inheritance 時,通常子類別的資料存儲在與父類別相同的資料表中
,這使得資料結構相對簡單,並且可以更容易地查詢和管理。
6.模組化和重用: 透過 Class Inheritance,你可以創建可重用的程式碼模塊,這些模塊可以在整個
應用程式中使用,提高了程式碼的模組化程度。
當我們在開發addons時,我們想要在使用BookName
,但我們需要再增加欄位並且也希望創建的資料存放在同一個Table中,這時候我們就可以使用Class Inheritance
:
model.py
class BookNameInheritance(models.Model):
_inherit = 'book.name'
librarien_field = fields.Many2one('employee',string='librarian',ondelete='set null')
__manifest__.py
......
'depends': ['library'],
......
在上面的例子中,我們可以方向,筆者只輸入了_inherit
,並指定了model book.name
,這種宣告方式是這種繼承的特性,如果你要宣告_name
與_description
的話,在Class Inheritance
你必須也必定要跟book.name
是一樣的:
class BookName(models.Model):
_name = 'book.name'
_description = "book's name model"
_inherit = 'book.name'
librarien_field = fields.Many2one('employee',string='librarian',ondelete='set null')
筆者在開發中,其實最常用到的並不是Class Inheritance
而是下一個章節的Prototype Inhertiance
,不同於 Class Inheritance
,Prototype Inheritance
的特點是通過物件的複製和委託來實現繼承。這種方法更靈活,但可能需要更多的程式碼和設計工作。,主要的原因是因為,當你在開發addons時,你會比較希望資料結構不要太複雜,這樣未來在維護或在開發,都是比較好去讓其他人接手的,因為兩者最大的差別就是在Table上的儲存。