第五章、内部类
一、概述
需要注意的是,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