Comment implémenter des classes imbriquées en Python

WBOY
Libérer: 2023-05-13 08:43:05
avant
1872 Les gens l'ont consulté

Q : Les classes peuvent-elles être écrites en classes Python ?

A : Oui, les classes en Python peuvent contenir d'autres classes, et ces classes sont appelées classes imbriquées ou types imbriqués. La syntaxe pour définir une classe imbriquée dans une classe est la même que pour définir une classe dans un module. Par exemple, voici un exemple qui contient des classes imbriquées :

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
Copier après la connexion

Dans cet exemple, OuterClass contient une classe imbriquée InnerClass, et une instance d'InnerClass est initialisée dans le constructeur d'OuterClass. La variable membre inner_var dans InnerClass est accessible en accédant à external.inner.inner_var.

Il convient de noter qu'il n'y a pas de restrictions d'accès particulières entre les classes imbriquées et leurs classes externes. Elles peuvent accéder aux variables et méthodes membres des autres. De plus, les classes imbriquées peuvent également être statiques ou dynamiques (c'est-à-dire qu'elles peuvent contenir ou non des méthodes d'instance).

Q : Comment InnerClass accède-t-il aux variables membres des classes externes ?

A : En Python, les classes imbriquées peuvent accéder aux variables membres des classes externes via le nom de la variable membre de la classe externe. Par exemple, dans l'exemple précédent, si vous souhaitez qu'InnerClass accède à la variable membre external_var d'OuterClass, vous pouvez modifier le code comme suit :

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
Copier après la connexion

Dans cet exemple, le constructeur d'InnerClass accède à OuterClass via OuterClass.outer_var La variable membre external_var dans. Il convient de noter que lorsque vous accédez aux variables membres de la classe externe, vous devez utiliser le nom de la classe externe, pas self, car la classe imbriquée et la classe externe sont deux classes différentes.

Q : Par exemple, si A emboîte B, comment créer un nouvel objet B dans la fonction de B ?

A : Si la classe B est définie dans la classe A, alors créez un nouvel objet B dans la fonction de B. L'objet B peut être implémenté de la manière suivante :

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
Copier après la connexion

Dans cet exemple, A contient une classe imbriquée B, et le constructeur init de B reçoit un paramètre val. La classe B contient également une méthode nommée create_new_b, qui reçoit un paramètre val et crée un nouvel objet de classe B en utilisant A.B(val). La méthode create_new_b renvoie l'objet B nouvellement créé. Un nouvel objet de classe B peut être créé en appelant la méthode b.create_new_b(2), où b est une instance de classe B dans un objet de classe A.

Il convient de noter que lors de la création d'un objet de classe B, vous devez utiliser A.B au lieu de B. En effet, B est imbriqué dans A, pas dans l'espace de noms global.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal