Python 中的巢狀類

Manav Narula 2021年2月7日
Python 中的巢狀類

類包含不同的資料成員和函式,並允許我們建立物件來訪問這些成員。

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 Narula avatar Manav Narula avatar

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

相關文章 - Python Class