📜  Python中的内部类(1)

📅  最后修改于: 2023-12-03 14:46:39.567000             🧑  作者: Mango

Python中的内部类

在Python中,类中可以定义另一个类,这被称为内部类。内部类可以在外部类中访问私有属性和方法,并且可以在外部类之外被访问。另外,内部类和外部类之间可以互相访问私有成员。

定义内部类

内部类定义与外部类类似,只不过是在外部类中定义。内部类可以当做普通类一样使用。

class OuterClass:
    def __init__(self):
        self.__x = 10

    def __str__(self):
        return 'OuterClass'

    class InnerClass:
        def __init__(self):
            self.__y = 20

        def __str__(self):
            return 'InnerClass'

在上述代码中,InnerClassOuterClass的内部类。InnerClass中定义了一个私有属性__y

访问内部类的实例

要访问内部类的实例,需要先创建外部类的实例,然后通过外部类的实例创建内部类的实例。

outer = OuterClass()
inner = outer.InnerClass()

在上述代码中,首先创建了OuterClass的实例outer,然后使用outer.InnerClass()的方式创建了InnerClass的实例。

访问内部类的私有成员

在内部类中可以访问外部类的私有成员,也可以访问自身的私有成员。同样,在外部类中也可以访问内部类的私有成员。

class OuterClass:
    def __init__(self):
        self.__x = 10

    def __str__(self):
        return 'OuterClass'

    class InnerClass:
        def __init__(self):
            self.__y = 20

        def __str__(self):
            return 'InnerClass'

        def get_x(self, outer):
            return outer.__x

        def get_y(self):
            return self.__y

    def get_y(self):
        inner = self.InnerClass()
        return inner.get_y()

在上述代码中,InnerClass中定义了两个方法get_xget_y,分别用于访问外部类的私有属性__x和内部类的私有属性__yOuterClass中也定义了一个方法get_y,用于访问内部类的私有属性__y

总结

Python中的内部类可以在外部类中访问私有成员,同时内部类和外部类之间也可以互相访问私有成员。内部类的定义方式与外部类类似,但是需要在外部类中定义。要访问内部类的实例,需要先创建外部类的实例,然后通过外部类的实例创建内部类的实例。