0Pricing
Python Academy · درس

typing.NamedTuple

أضف تلميحات الأنواع إلى named tuples

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

بديل مع تلميحات الأنواع

الفئة الأساسية typing.NamedTuple هي طريقة حديثة قائمة على الفئات لتعريف tuples مسماة. وهي تضيف تلميحات الأنواع وتبدو كفئة عادية، ما يجعل معظم المحررات ومدققات الأنواع تفهمها أفضل من صيغة المصنع.

صياغة قائمة على الفئات

أنشئ فئة فرعية من NamedTuple وصرّح عن كل حقل باستخدام تعليق نوع. وتظل النتيجة tuple حقيقية.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

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

السلوك نفسه للـ tuple

يظل كل ما كان متاحًا في إصدار المصنع يعمل كما هو: الوصول بالاسم، والوصول بالفهرس، وفك التعبئة، وعدم قابلية التغيير.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

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

القيم الافتراضية ضمنيًا

امنح الحقل قيمة افتراضية ببساطة من خلال إسناد قيمة إليه داخل جسم الفئة. ويجب أن تأتي الحقول ذات القيم الافتراضية بعد الحقول التي لا تملك قيمًا افتراضية.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int
    z: int = 0

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

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

لأنها فئة، يمكنك إضافة أساليب حقيقية إليها. وهذا أمر لا تستطيع دالة المصنع collections.namedtuple القيام به بطريقة سلسة.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

    def distance_sq(self):
        return self.x ** 2 + self.y ** 2

print(Point(3, 4).distance_sq())

والخصائص أيضًا

يمكنك أيضًا تعريف خصائص محسوبة تستخرج قيمًا من الحقول.

from typing import NamedTuple

class Rectangle(NamedTuple):
    width: int
    height: int

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

print(Rectangle(3, 4).area)

تظل الأساليب المساعدة متاحة

تظل أدوات tuple المساعدة المألوفة متاحة: تعمل _replace() و_asdict() و_fields بالطريقة نفسها.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

p = Point(1, 2)
print(p._asdict())
print(p._replace(x=9))

توضّح تلميحات الأنواع الغرض

لا تُفرَض التعليقات التوضيحية أثناء وقت التشغيل، لكنها توثّق الأنواع المتوقعة وتتيح لأدوات مثل mypy اكتشاف الأخطاء قبل تشغيل البرنامج.

from typing import NamedTuple

class Employee(NamedTuple):
    name: str
    salary: float
    active: bool = True

e = Employee('Alice', 5000.0)
print(e)

مقارنة NamedTuple و dataclass

عند الاختيار بينهما:

  • NamedTuple: غير قابل للتغيير، ويشبه tuple، ويدعم الفهرسة وفك التعبئة.
  • dataclass: قابل للتغيير افتراضيًا (أو مجمّد)، ولا يدعم الفهرسة، ويوفر خيارات ضبط أكثر.
  • اختر NamedTuple عندما يكون سلوك tuple مهمًا، واختر dataclass للسجلات الأكثر ثراءً.

التداخل والتركيب

تتكوّن tuples المسماة معًا بسلاسة. ويمكن أن يكون أحد الحقول tuple مسماة أخرى، ما يتيح إنشاء بيانات منظمة غير قابلة للتغيير.

from typing import NamedTuple

class Point(NamedTuple):
    x: int
    y: int

class Line(NamedTuple):
    start: Point
    end: Point

line = Line(Point(0, 0), Point(3, 4))
print(line.end.y)

كأنواع للقيم المعادة من الدوال

صرّح عن الدالة بحيث تعيد NamedTuple الخاص بك، ليعرف المحرر أنواع حقول النتيجة. ويوثّق التصريح بنية السجل المُعاد.

from typing import NamedTuple

class Stats(NamedTuple):
    minimum: int
    maximum: int

def analyze(nums) -> Stats:
    return Stats(min(nums), max(nums))

r = analyze([5, 2, 8])
print(r.minimum, r.maximum)

تحقق سريع

ما إحدى مزايا typing.NamedTuple مقارنةً بدالة المصنع collections.namedtuple؟

مراجعة

لقد تعلمت إضافة تلميحات الأنواع إلى tuples المسماة.

  • أنشئ فئة فرعية من typing.NamedTuple مع حقول موضّحة الأنواع.
  • عيّن القيم الافتراضية ضمنيًا، وأضف الأساليب والخصائص.
  • تظل الأدوات المساعدة _replace و_asdict و_fields تعمل.
  • فضّله على المصنع من أجل سهولة القراءة ودعم الأدوات.

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

هل درس «typing.NamedTuple» مجاني؟

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

ماذا ستتعلم في «typing.NamedTuple»؟

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

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

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

كم من الوقت يستغرق درس «typing.NamedTuple»؟

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

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

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

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

  1. فئة Enum
  2. IntEnum وFlag
  3. أساسيات NamedTuple
  4. typing.NamedTuple
← العودة إلى Python Academy