Python - 内部类



Python 中的内部类

在 Python 中,定义在另一个类内部的类被称为内部类。有时内部类也被称为嵌套类。如果内部类被实例化,则父类也可以使用内部类的对象。内部类的对象成为外部类的一个属性。内部类自动继承外部类的属性,而无需正式建立继承关系。

语法

class outer:
   def __init__(self):
      pass
   class inner:
      def __init__(self):
         pass

内部类允许您对类进行分组。嵌套类的优点之一是更容易理解哪些类是相关的。内部类具有局部作用域。它充当外部类的一个属性。

示例

在下面的代码中,我们有 student 作为外部类,subjects 作为内部类。student 的 __init__() 构造函数初始化 name 属性和 subjects 类的实例。另一方面,内部 subjects 类的构造函数初始化两个实例变量 sub1、sub2。

外部类的 show() 方法使用已实例化的对象调用内部类的方法。

class student:
   def __init__(self):
      self.name = "Ashish"
      self.subs = self.subjects()
      return
   def show(self):
      print ("Name:", self.name)
      self.subs.display()
   class subjects:
      def __init__(self):
         self.sub1 = "Phy"
         self.sub2 = "Che"
         return
      def display(self):
         print ("Subjects:",self.sub1, self.sub2)
         
s1 = student()
s1.show()

执行此代码时,将产生以下输出 -

Name: Ashish
Subjects: Phy Che

完全可以独立声明外部类的对象,并使其调用自己的 display() 方法。

sub = student().subjects().display()

它将列出科目。

内部类的类型

在 Python 中,内部类有两种类型 -

  • 多重内部类
  • 多级内部类

多重内部类

多重内部类中,单个外部类包含多个内部类。每个内部类都独立工作,但可以与外部类的成员进行交互。

示例

在下面的示例中,我们创建了一个名为Organization 的外部类和两个内部类。

class Organization:
   def __init__(self):
      self.inner1 = self.Department1()
      self.inner2 = self.Department2()
        
   def showName(self):
      print("Organization Name: Tutorials Point")

   class Department1:
      def displayDepartment1(self):
         print("In Department 1")
            
   class Department2:
      def displayDepartment2(self):
         print("In Department 2")

# instance of OuterClass
outer = Organization() 
# Calling show method
outer.showName()  
# InnerClass instance 1
inner1 = outer.inner1 
# Calling display method
inner1.displayDepartment1() 
# InnerClass instance 2
inner2 = outer.inner2 
# Calling display method
inner2.displayDepartment2() 

执行后,此代码将产生以下输出 -

Organization Name: Tutorials Point
In Department 1
In Department 2

多级内部类

它指的是一个内部类,该内部类本身包含另一个内部类。它创建了多级嵌套类。

示例

以下代码解释了 Python 中多级内部类的工作原理 -

class Organization:
   def __init__(self):
      self.inner = self.Department()

   def showName(self):
      print("Organization Name: Tutorials Point")

   class Department:
      def __init__(self):
         self.innerTeam = self.Team1()

      def displayDep(self):
         print("In Department")

      class Team1:
         def displayTeam(self):
            print("Team 1 of the department")

# instance of outer class                
outer = Organization()  
# call the method of outer class
outer.showName()  

# Inner Class instance
inner = outer.inner  
inner.displayDep()  

# Access Team1 instance
innerTeam = inner.innerTeam  
# Calling display method
innerTeam.displayTeam() 

运行以上代码,将产生以下输出

Organization Name: Tutorials Point
In Department
Team 1 of the department
广告