آموزش پایتون - کلاس و اشیای بی‌نام

تابع توکار ()type در پایتون، کلاسی را که یک شیء به آن تعلق دارد برمی‌گرداند. در پایتون، یک کلاس — چه کلاس توکار باشد و چه کلاسی که توسط کاربر تعریف شده باشد — شیئی از نوع type است.

مثال

class myclass:
   def __init__(self):
      self.myvar=10
      return
      
obj = myclass()

print ('class of int', type(int))
print ('class of list', type(list))
print ('class of dict', type(dict))
print ('class of myclass', type(myclass))
print ('class of obj', type(obj))

این کد خروجی زیر را تولید خواهد کرد −

class of int <class 'type'>
class of list <class 'type'>
class of dict <class 'type'>
class of myclass <class 'type'>

تابع ()type یک نسخه با سه آرگومان نیز دارد به صورت زیر −

ساختار (Syntax)

newclass=type(name, bases, dict)

با استفاده از ساختار بالا، می‌توان یک کلاس را به صورت پویا (داینامیک) ایجاد کرد. سه آرگومان تابع type عبارتند از −

  • name − نام کلاس که به ویژگی __name__ در کلاس جدید تبدیل می‌شود

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

  • dict − دیکشنری که فضای نام (namespace) کلاس جدید را می‌سازد و شامل ویژگی‌ها، متدها و مقادیر آن‌ها است.

ایجاد یک کلاس بی‌نام (Anonymous Class)

ما می‌توانیم با استفاده از نسخه سه آرگومانی ()type یک کلاس بی‌نام ایجاد کنیم. آرگومان name یک رشته خالی است، آرگومان دوم یک تاپل تک‌عنصری از کلاس object است (توجه داشته باشید که هر کلاس در پایتون از کلاس object ارث‌بری می‌کند). برخی متغیرهای نمونه را به عنوان آرگومان سوم که یک دیکشنری است اضافه می‌کنیم. فعلاً آن را خالی نگه می‌داریم.

anon=type('', (object, ), {})

ایجاد یک شیء بی‌نام (Anonymous Object)

برای ایجاد یک شیء از این کلاس بی‌نام −

obj = anon()
print ("type of obj:", type(obj))

نتیجه نشان می‌دهد که شیء از یک کلاس بی‌نام است

type of obj: <class '__main__.'>

مثال کلاس و شیء بی‌نام

همچنین می‌توانیم متغیرهای نمونه و متدهای نمونه را به صورت پویا اضافه کنیم. به این مثال نگاه کنید −

def getA(self):
   return self.a
obj = type('',(object,),{'a':5,'b':6,'c':7,'getA':getA,'getB':lambda self : self.b})()
print (obj.getA(), obj.getB())

این کد خروجی زیر را تولید خواهد کرد −

5 6

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