اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

الدالة len تستخدم التابع __len__ في حالة تواجده لإرجاع طول الكائن كما تم تعريفه في التابع:

مثال:

class Me:
    
    pass

a = Me()

print(len(a))

المثال السابق سيُعطي خطأ بالشكل التالي:

TypeError: object of type 'Me' has no len()

بمعنى الغرض من النوع Me لا يملك طول.

يُمكننا أن نجعل للغرض طول عبر تعريف التابع __len__ في الكلاس و سيتم إستدعاؤه عند إستدعاء الدالة len:

class Me:
    
    def __len__(self):
        return 5

a = Me()

print(len(a)) # 5

مثلاً يُمكننا إنشاء كلاس Person و نجعل الدالة len عند إستعمالها مع كائنات هذا الصنف تُعيد عدد أحرف إسم الشخص بالشكل التالي:

class Person:
    
    def __init__(self, name):
        self.name = name
    
    def __len__(self):
        return len(self.name)


print(len(Person("Samir"))) # 5
print(len(Person("Hanan Fahad"))) # 11
print(len(Person("John Doe"))) # 8

و بطبيعة الحال إن لم يكن التابع __len__ مُعرف سيُعطي خطأ عند إستعمال الدالة len على هذه الكائنات.

يُمكننا إستخدام التابع __len__ مُباشرة لكنه غير مريح للعين، بعكس الدالة len:

fruits = ["apple", "banana", "cherry"]

print(len(fruits)) # 3
print(fruits.__len__()) # 3
  • 0
نشر

دالة `__len__` تُستخدم في لغة Python لتعريف طريقة لاسترداد طول (عدد العناصر) لكائن معين من الصنف (class) عند استخدام دالة `len()`.

عندما تستدعى دالة `len()` على كائن ما، فإن Python يحاول استدعاء دالة `__len__()` المعرفة داخل الكائن. وبالتالي، يمكنك تعريف دالة `__len__()` داخل صنفك الخاص لتحديد كيفية استرداد طول الكائن عند استخدام `len()`.

على سبيل المثال، إذا كنت ترغب في تعريف صنف لقائمة مخصصة، يمكنك استخدام دالة `__len__()` لتحديد طول القائمة عند استخدام `len()`:

class MyList:
    def __init__(self):
        self.items = []

    def __len__(self):
        return len(self.items)

my_list = MyList()
my_list.items = [1, 2, 3, 4, 5]

print(len(my_list))  # سيطبع: 5

في هذا المثال، تم تعريف دالة `__len__()` داخل صنف `MyList` لتسترد طول القائمة `items` عند استخدام `len(my_list)`.

بالمقابل، دالة `len()` تستخدم لاسترداد طول الهيكل البيانات المدمجة في Python مثل القوائم والسلاسل والمجموعات والقواميس. ولكن عند استخدام `len()` مع صنف مخصص، فإن Python يحاول استدعاء دالة `__len__()` المعرفة داخل الكائن بدلاً من استخدام `len()` المعينة مسبقًا.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...