So implementieren Sie verschachtelte Klassen in Python

WBOY
Freigeben: 2023-05-13 08:43:05
nach vorne
1873 Leute haben es durchsucht

F: Können Klassen in Python-Klassen geschrieben werden?

A: Ja, Klassen in Python können andere Klassen enthalten, und diese Klassen werden verschachtelte Klassen oder verschachtelte Typen genannt. Die Syntax zum Definieren einer verschachtelten Klasse innerhalb einer Klasse ist dieselbe wie zum Definieren einer Klasse innerhalb eines Moduls. Das Folgende ist beispielsweise ein Beispiel, das verschachtelte Klassen enthält:

class OuterClass:
    def __init__(self):
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            self.inner_var = 42

outer = OuterClass()
print(outer.inner.inner_var) # 输出:42
Nach dem Login kopieren

In diesem Beispiel enthält OuterClass eine verschachtelte Klasse InnerClass und eine Instanz von InnerClass wird im Konstruktor von OuterClass initialisiert. Auf die Mitgliedsvariable inner_var in InnerClass kann durch Zugriff auf äußere.inner.inner_var zugegriffen werden.

Es ist zu beachten, dass es keine besonderen Zugriffsbeschränkungen zwischen verschachtelten Klassen und ihren externen Klassen gibt. Sie können auf die Mitgliedsvariablen und -methoden des jeweils anderen zugreifen. Darüber hinaus können verschachtelte Klassen auch statisch oder dynamisch sein (d. h. sie können Instanzmethoden enthalten oder nicht).

F: So greifen Sie auf die Mitgliedsvariablen der externen Klasse in InnerClass zu

A: In Python können verschachtelte Klassen über den Namen der externen Klasse und die Mitgliedsvariable auf die externe Klasse zugreifen Name. Mitgliedsvariablen. Wenn Sie beispielsweise im vorherigen Beispiel möchten, dass InnerClass auf die Mitgliedsvariable „outer_var“ von OuterClass zugreift, können Sie den Code wie folgt ändern:

class OuterClass:
    def __init__(self):
        self.outer_var = 100
        self.inner = self.InnerClass()

    class InnerClass:
        def __init__(self):
            outer_var = OuterClass.outer_var
            print(outer_var)

outer = OuterClass() # 输出:100
Nach dem Login kopieren

In diesem Beispiel übergibt der Konstruktor von InnerClass OuterClass Auf die Mitgliedsvariable „outer_var“ in „OuterClass“ wird über „outer_var“ zugegriffen. Es ist zu beachten, dass Sie beim Zugriff auf Mitgliedsvariablen einer externen Klasse den Namen der externen Klasse und nicht den Namen „self“ verwenden müssen, da die verschachtelte Klasse und die externe Klasse zwei verschiedene Klassen sind.

F: Wenn A beispielsweise B verschachtelt, wie erstellt man ein neues B-Objekt in der Funktion von B? Ein neues B-Objekt in der Funktion von B kann auf folgende Weise erreicht werden:

class A:
    class B:
        def __init__(self, val):
            self.val = val

        def create_new_b(self, val):
            new_b = A.B(val)
            return new_b

a = A()
b = a.B(1)
new_b = b.create_new_b(2)
print(b.val)  # 输出 1
print(new_b.val)  # 输出 2
Nach dem Login kopieren

In diesem Beispiel enthält A eine verschachtelte Klasse B und der Konstruktor init von B erhält einen Parameter val. Klasse B enthält außerdem eine Methode namens create_new_b, die einen Parameter val empfängt und mit A.B(val) ein neues Klasse-B-Objekt erstellt. Die Methode create_new_b gibt das neu erstellte B-Objekt zurück. Ein neues Objekt der Klasse B kann durch Aufrufen der Methode b.create_new_b(2) erstellt werden, wobei b eine Instanz der Klasse B innerhalb eines Objekts der Klasse A ist.

Es ist zu beachten, dass Sie beim Erstellen eines Klasse-B-Objekts A.B anstelle von B verwenden müssen. Dies liegt daran, dass B in A und nicht im globalen Namespace verschachtelt ist.

Das obige ist der detaillierte Inhalt vonSo implementieren Sie verschachtelte Klassen in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage