Python内部类

发布时间:2024年01月23日

?第五章、内部类

一、概述

需要注意的是,Python 中的类嵌套的作用域和访问规则是不同于 Java 中的内部类的。在 Python 中,类嵌套主要用于组织代码,而不是实现内部类和外部类的严格隔离。

????????在 Python 中,没有严格对应于 Java 中的实例内部类、静态内部类、局部内部类和匿名内部类的概念。Python 的类和嵌套类之间的关系较为简单,没有 Java 中那样的严格分层和访问控制。

????????在 Python 中,类的嵌套关系是平等的,而不是外部类和内部类的关系。然而,Python 中可以通过嵌套类的方式实现类似的效果,但是在概念上略有不同。以下是一些示例来说明这些概念在 Python 中的实现:

二、实例内部类

我们可以通过外部类的实例来访问内部类,就像访问其他属性一样。内部类也可以访问外部类的成员,但需要通过外部类的实例来访问。

在 Python 中,嵌套类可以访问外部类的实例变量,类似于实例内部类的效果。

# 作   者:JZQ
# 开发时间:2023/8/21 10:55

class OuterClass:
    def __init__(self):
        #实例外部变量
        self.instance_outer_var = "实例外部变量"

    #实例外部方法
    def instace_outer_method(self):
        print("实例外部方法")

    static_outer_var = "静态外部变量"

    @staticmethod
    def static_outer_method():
        print("静态外部方法")

    @classmethod
    def class_outer_method(cls):
        print("类外部方法")

    class InnerClass:
        def __init__(self):
            self.instance_inner_var = "实例内部变量"

        def instance_inner_method(self,outer_obj:"OuterClass"):
            print("实例内部方法")
            print("=" * 30)
            print(outer_obj.instance_outer_var)
            print(outer_obj.static_outer_var)
            outer_obj.instace_outer_method()
            outer_obj.static_outer_method()
            outer_obj.class_outer_method()
            print("=" * 30)

        static_inner_var = "静态内部变量"

        @staticmethod
        def static_inner_method():
            print("静态内部方法")

        @classmethod
        def class_inner_method(cls):
            print("类内部方法")

outer_obj = OuterClass()
inner_obj = outer_obj.InnerClass()

outer_obj.instace_outer_method()  # 调用外部类的方法
inner_obj.instance_inner_method(outer_obj)  # 调用内部类的方法

print(outer_obj.instance_outer_var)  # 访问外部类的成员变量
print(inner_obj.static_inner_var)  # 访问内部类的成员变量
"""
实例外部方法
实例内部方法
==============================
实例外部变量
静态外部变量
实例外部方法
静态外部方法
类外部方法
==============================
实例外部变量
静态内部变量
"""

三、局部内部类

Python 中没有局部内部类的概念,嵌套类在外部类的作用域中可见。

class OuterClass:
    def outer_method(self):
        class LocalInner:
            def inner_method(self):
                print("Local inner method")

        local_inner_obj = LocalInner()
        local_inner_obj.inner_method()

outer_obj = OuterClass()
outer_obj.outer_method() #Local inner method

文章来源:https://blog.csdn.net/Fddadd/article/details/135773197
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。