Python中的類 物件 繼承

2021-09-20 08:02:48 字數 3362 閱讀 2897

python中,類的命名使用帕斯卡命名方式,即首字母大寫。

python中定義類的方式如下:

class

類名([父類名[,父類名[,...]]]):

pass

省略父類名表示該類直接繼承自object,類的例項化如下:

class

person():

def__init__

(self):

pass

person=person()

__init__()是類的建構函式,在例項化時呼叫,它的引數self表示類例項。

欄位的訪問級別:

class

person():

age = 24_name = '

person

'__family_name = '

securate

'def

__init__

(self):

print('

person init

')

person類成員:

在上圖中,我們可以看到類中並沒有出現一雙下劃線開頭的字段__family_name,而多出乙個_person__family_name。說明類例項不可以直接訪問__family_name,但可以通過例項名._person__family_name的方式來訪問。

上述三種型別的變數均可以通過類或類例項進行訪問。通過self定義的變數只能通過類例項進行訪問,如self.country,變數country只能通過類例項進行訪問。

python中方法名均為小寫字母,不同單詞間以下劃線進行分割。

方法的覆蓋

python類中沒有方法的過載,對於具有相同名稱的方法,後面的定義會覆蓋掉前面的定義;子類會覆蓋父類中同名的方法。在person類中定義兩個同名方法say

def

say(self, message):

print

(message)

defsay(self, info):

print('

second:

'+info)

person=person()

person.say(

'invoke

')

程式執行結果:

從程式執行結果可知,呼叫的是定義在後面的say(self, info)方法。

特殊方法

以雙下劃線開頭和結尾的方法屬於特殊方法,如:__init__(self)__call__(self)等內建方法。在我們自己定義方法時不建議採取這種方式。

方法的訪問級別

和字段類似,上述訪問級別也只是一種程式設計約定,即便是以雙下劃線開頭的方法,在類的外部也是可以訪問的,但不建議這麼做。

例項方法

定義方法時,沒有裝飾器修飾且帶有引數的(可以不是self),即為例項方法。

類外部通過類例項來呼叫,類內部通過self.方法名來呼叫。

def

method(self):

pass

@classmethod

@classmethod是python中的裝飾器。

使用@classmethod修飾的方法,必須要帶引數(預設引數名是cls),該引數表示類自身。可以通過類自身或者類例項呼叫@classmethod修飾的方法。在@classmethod修飾的方法中無法訪問例項成員,但可以通過cls或者類名訪問類中的字段。

@staticmethod

使用@staticmethod修飾的方法可以沒有引數,可以通過類或者類例項呼叫。在@staticmethod修飾的方法中,無法訪問類中的例項成員,可以通過類名訪問類中的字段。

定義乙個chinese類,繼承自person類:

class

chinese(person):

def__init__

(self):

pass

chinese=chinese()

chinese中的字段:

從chinese型別的例項中,我們可以看到chinese類繼承了除country之外的所有字段。

子類還會繼承父類中的函式,若子類沒有實現自己的建構函式(__init__(self)),那麼在例項化子類時會呼叫父類的建構函式。

class

person():

def__init__

(self):

pass

defconvert(self, class_type):

ifissubclass(class_type, person):

return

(class_type)(self)

class

chinese(person):

def__init__(self, convert=none):

pass

defcn_method(self):

print('

chinese')

class

japanese(person):

def__init__(self, convert=none):

pass

執行型別轉換:

jap =japanese()

cn =jap.convert(chinese)

cn.cn_method()

型別轉換結果如下圖:

可以看到,根據japanese例項得到了chinese型別例項。這裡的轉換只是獲取了chinese型別的例項cn,而原有的japanese型別例項依然存在於記憶體中。

程式執行結果如下圖:

Python類繼承物件

類宣告從object繼承有什麼理由嗎?我剛剛找到了執行此操作的 但找不到很好的理由。class myclass object class code follows.難學python的歷史 python最初對類的再現在許多方面都被破壞了。到發現此故障時,已經為時已晚,他們必須予以支援。為了解決此問題,...

python中的類,物件,例項,繼承,多型

恢復內容開始 類 通俗來講是 屬性和方法的集合 用來描述具有相同的屬性和方法的物件的集合。它定義了該集合中每個物件所共有的屬性和方法。物件,即為類的例項,物件可呼叫類的屬性和方法 類的定義,需要以大寫開頭來定義類的名字 class test class test 定義類 首字母大寫 a 12345 ...

Python物件導向 類的繼承

基本概念 物件導向三要素之一,繼承inheritance 上例可以看出,通過繼承 貓類不同寫 直接繼承了父類的屬性和方法。繼承 定義格式如下 class 子類名 基類1 基類2,語句塊如果類定義時,沒有基類列表,等同於繼承自object。在python3中object類是所有物件的根基類 class...