Python内部类

 第五章、内部类

一、概述

需要注意的是,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

  • 6
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值