Python繼承擴充套件內建類

2022-08-15 08:09:11 字數 1819 閱讀 2980

繼承最有趣的應用是給內建類新增功能,在之前的contact類中,我們將聯絡人新增到所有聯絡人的列表裡,如果想通過名字來搜尋,那麼就可以在contact類新增乙個方法用於搜尋,但是這種方法實際上屬於列表本身,我們可以使用繼承來做:

class

contactlist(list):

defsearch(self, name):

'''return all contacts that contain the search value

in their name.

'''matching_contacts =

for contact in

self:

if name in

contact.name:

return

matching_contacts

class

contact:

all_contacts =contactlist()

def__init__

(self, name, email):

self.name =name

self.email =email

我們建立了乙個contactlist來擴充套件python內建的list,而不是例項化乙個普通的列表來作為我們的變數,如下來測試這個新的搜尋功能:

>>> c1 = contact("

john a

", "

[email protected]")

>>> c2 = contact("

john b

", "

[email protected]")

>>> c3 = contact("

jenna c

", "

[email protected]")

>>> [c.name for c in contact.all_contacts.search('

john')]

['john a

', '

john b

']

用[ ]來建立乙個空的列表實際上使用list()建立空列表的簡化形式,這兩種語法是相同的:

>>>  ==list()

true

所以,list這個資料型別像乙個我們可以擴充套件的類,而不像object。類似我們可以擴充套件dict類,這種建立欄位的形式是繁瑣的(語法)。

class

longnamedict(dict):

deflongest_key(self):

longest =none

for key in

self:

ifnot longest or len(key) >len(longest):

longest =key

return longest

簡單測試如下:

>>> longkeys =longnamedict()

>>> longkeys['

hello

'] = 1

>>> longkeys['

longest yet

'] = 5

>>> longkeys['

hello2

'] = '

world

'>>>longkeys.longest_key()

'longest yet

'

大部分的內建資料型別都可以類似的進行擴充套件,常見的可擴充套件的資料型別是object、list、set、dict、file以及str。像int和float這些數值偶爾也會做繼承。

Python內建函式super 繼承父類

python內建函式super 主要用於類的多繼承中,用來查詢並呼叫父類的方法,所以在單重繼承中用不用 super 都沒關係 但是,使用 super 是乙個好的習慣。一般我們在子類中需要呼叫父類的方法時才會這麼用。下面是一段示例 類c a 中繼承父類a。執行c的例項化時,流程為 1 執行a的例項化,...

Django擴充套件內建User類

內建user類 使用內建user可以方便實現登入驗證,利用admin管理介面還可以方便新增 刪除 修改使用者。乙個內建的user類定義了以下字段 username 使用者名稱 password 密碼 first name 姓名first last name 姓名last email 郵箱 group...

python內建類 Python 類的內建方法

usr bin env python coding utf 8 python內建方法 class a n a def f2 self print from a class b a n b def f1 self print from b def f2 self print f2 from b cla...