0Pricing
Python Academy · درس

تعريف Dataclass

استخدم @dataclass للتخلص من التعليمات البرمجية التكرارية

تعريف Dataclass درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.

لماذا نستخدم Dataclasses؟

عندما تكتب فئة تُستخدم أساسًا للاحتفاظ بالبيانات، ستجد نفسك تكرر الشيفرة التمهيدية نفسها: __init__ و__repr__ و__eq__. تنشئ وحدة dataclasses كل ذلك نيابةً عنك انطلاقًا من تعريفات بسيطة للحقول.

  • شيفرة أقل للكتابة والقراءة.
  • فرص أقل لوقوع أخطاء إملائية في __init__.
  • مدمجة في المكتبة القياسية منذ Python 3.7.

الطريقة القديمة

إليك فئة عادية تخزّن نقطة. لاحظ مقدار الكتابة المطلوب لمجرد تخزين رقمين.

class Point:
    def __init__(self, x, y):
        self.x = x
        self.y = y

p = Point(1, 2)
print(p.x, p.y)

المزخرف @dataclass

طبّق @dataclass فوق الفئة، وعرّف الحقول باستخدام تعليقات الأنواع. تنشئ Python الدالة __init__ تلقائيًا.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(p.x, p.y)

التوليد التلقائي لـ __repr__

تنشئ Dataclasses أيضًا __repr__ مقروءًا، بحيث يعرض طباعة الكائن حقوله بدلًا من عنوان الذاكرة.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(3, 4))

التوليد التلقائي لـ __eq__

تتساوى مثيلتان من dataclass عندما تتساوى جميع حقولهما. لا حاجة إلى كتابة __eq__ يدويًا.

from dataclasses import dataclass

@dataclass
class Point:
    x: int
    y: int

print(Point(1, 2) == Point(1, 2))
print(Point(1, 2) == Point(9, 9))

تعليقات الأنواع مطلوبة

يجب أن يحتوي كل حقل على تعليق نوع. فهذا التعليق هو ما يخبر آلية dataclass بأن الاسم يمثل حقلًا. أما الإسناد المجرد من دون تعليق نوع فيصبح سمة عادية للفئة، وليس حقلًا.

from dataclasses import dataclass

@dataclass
class User:
    name: str
    age: int

u = User('Alice', 30)
print(u)

إضافة الأساليب

تظل dataclass فئة عادية. ويمكنك إضافة أساليب عادية تستخدم الحقول التي تم إنشاؤها تلقائيًا.

from dataclasses import dataclass

@dataclass
class Rectangle:
    width: int
    height: int

    def area(self):
        return self.width * self.height

r = Rectangle(3, 4)
print(r.area())

تغيير قيم الحقول

تكون مثيلات dataclass قابلة للتغيير افتراضيًا، لذا يمكنك إعادة إسناد الحقول بعد الإنشاء، تمامًا مثل السمات العادية.

from dataclasses import dataclass

@dataclass
class Counter:
    value: int

c = Counter(0)
c.value += 5
print(c.value)

‏asdict وastuple

تحوّل الدالتان المساعدتان asdict() وastuple() المثيل إلى قاموس أو صف، وهو أمر مفيد للتسلسل.

from dataclasses import dataclass, asdict, astuple

@dataclass
class Point:
    x: int
    y: int

p = Point(1, 2)
print(asdict(p))
print(astuple(p))

Dataclasses متداخلة

يمكن أن يكون حقل dataclass نفسه dataclass أخرى. ويتعامل __repr__ وasdict() اللذان يتم إنشاؤهما تلقائيًا مع البنى المتداخلة بشكل递归ي.

from dataclasses import dataclass, asdict

@dataclass
class Address:
    city: str

@dataclass
class Person:
    name: str
    address: Address

p = Person('Bob', Address('Paris'))
print(asdict(p))

متى تستخدم Dataclasses؟

استخدم dataclass عندما تجمع الفئة أساسًا قيمًا مترابطة معًا.

  • كائنات الإعدادات.
  • السجلات التي تعيدها الدالة.
  • أنواع القيم البسيطة مثل الإحداثيات أو الأموال.

أما الفئات التي يغلب عليها السلوك بدلًا من البيانات، فقد تكون الفئة العادية أوضح في القراءة.

تحقق سريع

ماذا ينشئ المزخرف @dataclass تلقائيًا؟

مراجعة

تعلمت استخدام @dataclass لإزالة الشيفرة التمهيدية المتكررة.

  • عرّف الحقول باستخدام تعليقات الأنواع.
  • يتم إنشاء __init__ و__repr__ و__eq__ تلقائيًا.
  • استخدم asdict() وastuple() لتحويل المثيلات.
  • لا يزال بإمكانك إضافة الأساليب وتداخل Dataclasses.

الأسئلة الشائعة

هل درس «تعريف Dataclass» مجاني؟

نعم — نص درس «تعريف Dataclass» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.

ماذا ستتعلم في «تعريف Dataclass»؟

استخدم @dataclass للتخلص من التعليمات البرمجية التكرارية تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟

لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «تعريف Dataclass»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟

نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. تعريف Dataclass
  2. القيم الافتراضية وخيارات field()
  3. خيارات التجميد والمقارنة
  4. مكتبة attrs
← العودة إلى Python Academy