Python 中的巢狀類
Manav Narula
2021年2月7日
類包含不同的資料成員和函式,並允許我們建立物件來訪問這些成員。
Python 作為一種物件導向的程式語言,有很多這樣的不同類的物件。在 Python 中,我們有一個重要的建構函式,叫做 __init__
,每次建立類的例項時都會呼叫它,我們還有 self
關鍵字來引用類的當前例項。
巢狀類(也叫內類)是在另一個類中定義的。它在所有物件導向的程式語言中都是非常常用的,可以有很多好處。它並不能提高執行時間,但可以通過將相關的類歸為一組來幫助程式的可讀性和維護,而且還可以將巢狀類隱藏起來,不讓外界看到。
下面的程式碼展示了一個非常簡單的巢狀類的結構。
class Dept:
def __init__(self, dname):
self.dname = dname
class Prof:
def __init__(self, pname):
self.pname = pname
math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")
print(math.dname)
print(mathprof.pname)
輸出:
Mathematics
Mark
注意,我們不能直接訪問內部類。我們使用 outer.inner
格式建立其物件。
我們可以訪問外類中的巢狀類,但不能反過來訪問。要訪問外類中的巢狀類,我們可以使用 outer.inner
格式或 self
關鍵字。
在下面的程式碼中,我們對上述類做了一些改動,並使用父類訪問巢狀類的一個函式。
class Dept:
def __init__(self, dname):
self.dname = dname
self.inner = self.Prof()
def outer_disp(self):
self.inner.inner_disp(self.dname)
class Prof:
def inner_disp(self, details):
print(details, "From Inner Class")
math = Dept("Mathematics")
math.outer_disp()
輸出:
Mathematics From Inner Class
在 Python 中,我們也可以有多個巢狀類。這種情況稱為多巢狀類,有一個或多個內類。
也可以有一些情況,我們在一個巢狀類中有一個巢狀類,這種情況稱為多級巢狀類。
下面的程式碼展示了一個非常簡單的多級巢狀類的例子。
class Dept:
def __init__(self, dname):
self.dname = dname
class Prof:
def __init__(self, pname):
self.pname = pname
class Country:
def __init__(self, cname):
self.cname = cname
math = Dept("Mathematics")
mathprof = Dept.Prof("Mark")
country = Dept.Prof.Country("UK")
print(math.dname, mathprof.pname, country.cname)
輸出:
Mathematics Mark UK
作者: Manav Narula
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn