آموزش پایتون - کلاس‌های داخلی

کلاسی که داخل یک کلاس دیگر تعریف می‌شود، در پایتون به‌نام کلاس داخلی (inner class) شناخته می‌شود. گاهی اوقات به کلاس داخلی، کلاس تو‌در‌تو (nested class) نیز می‌گویند. اگر از کلاس داخلی نمونه‌سازی شود، شیء کلاس داخلی می‌تواند توسط کلاس والد نیز مورد استفاده قرار گیرد. شیء کلاس داخلی به یکی از ویژگی‌های کلاس بیرونی تبدیل می‌شود. کلاس داخلی به‌طور خودکار ویژگی‌های کلاس بیرونی را بدون ایجاد رسمی ارث‌بری به ارث می‌برد.

سنتکس

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

یک کلاس داخلی به شما اجازه می‌دهد کلاس‌ها را گروه‌بندی کنید. یکی از مزایای تو‌در‌تو کردن کلاس‌ها این است که درک ارتباط بین کلاس‌ها آسان‌تر می‌شود. کلاس داخلی دارای حوزه محلی (local scope) است و به عنوان یکی از ویژگی‌های کلاس بیرونی عمل می‌کند.

مثال

در کد زیر، کلاس student به عنوان کلاس بیرونی و کلاس subjects به عنوان کلاس داخلی تعریف شده است. سازنده __init__() در کلاس student، ویژگی 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()

این کار لیست دروس را نمایش می‌دهد.

انواع کلاس داخلی

در پایتون، کلاس‌های داخلی به دو دسته تقسیم می‌شوند −

  • کلاس داخلی چندگانه (Multiple Inner Class)
  • کلاس داخلی چندسطحی (Multilevel Inner Class)

کلاس داخلی چندگانه

در کلاس داخلی چندگانه، یک کلاس بیرونی منفرد شامل بیش از یک کلاس داخلی است. هر کلاس داخلی به صورت مستقل عمل می‌کند، اما می‌تواند با اعضای کلاس بیرونی تعامل داشته باشد.

مثال

در مثال زیر، یک کلاس بیرونی به نام 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

کلاس داخلی چندسطحی

این نوع به کلاس داخلی اشاره دارد که خود شامل یک کلاس داخلی دیگر است و چند سطح از کلاس‌های تو‌در‌تو را ایجاد می‌کند.

مثال

کد زیر نحوه کار کلاس داخلی چندسطحی در پایتون را توضیح می‌دهد −

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

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.