أنماط الفئات
طابق القيم مع سمات الكائنات
أنماط الفئات درس مجاني في Python Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Python Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Python Academy 4 دروس في المجموع.
مطابقة الكائنات
تتيح أنماط الفئات لـ match التحقق من نوع كائن واستخراج سماته في خطوة واحدة. وتبدو هذه الأنماط كاستدعاء مُنشئ داخل حالة.
التحقق من النوع فقط
يطابق نمط الفئة ذي القوسين الفارغين أي مثيل من تلك الفئة.
def kind(value):
match value:
case int():
return 'an integer'
case str():
return 'a string'
case _:
return 'something else'
print(kind(5))
print(kind('hi'))
print(kind([1]))التقاط السمات بالاسم
اكتب attr=name داخل القوسين لمطابقة المثيلات وربط السمة المسماة بمتغير.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(3, 4)
match p:
case Point(x=px, y=py):
print('point at', px, py)مطابقة قيم سمات محددة
يمكنك اشتراط أن تساوي السمة قيمة حرفية. ولا تطابق هذه الحالة إلا النقاط الواقعة على المحور x.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
def describe(p):
match p:
case Point(x=0, y=0):
return 'origin'
case Point(x=x, y=0):
return 'on x-axis at ' + str(x)
case Point():
return 'elsewhere'
print(describe(Point(0, 0)))
print(describe(Point(5, 0)))
print(describe(Point(1, 1)))الأنماط الموضعية باستخدام __match_args__
إذا عرّفت فئة ما __match_args__، فيمكنك مطابقة السمات حسب مواضعها. وتعيّن dataclass ذلك تلقائيًا وفق ترتيب حقولها.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
p = Point(3, 4)
match p:
case Point(px, py):
print(px, py)تعريف __match_args__ يدويًا
بالنسبة إلى الفئة العادية، عيّن __match_args__ إلى tuple تتضمن أسماء السمات التي تريد إتاحتها حسب الموضع.
class Point:
__match_args__ = ('x', 'y')
def __init__(self, x, y):
self.x = x
self.y = y
match Point(1, 2):
case Point(a, b):
print(a, b)التفرّع حسب الفئة
تنشئ أنماط الفئات موزّعًا واضحًا على مجموعة من الأنواع المرتبطة، بحيث تتولى كل حالة معالجة نوعها الخاص.
from dataclasses import dataclass
@dataclass
class Circle:
radius: float
@dataclass
class Square:
side: float
def area(shape):
match shape:
case Circle(radius=r):
return 3.14159 * r * r
case Square(side=s):
return s * s
print(area(Circle(2)))
print(area(Square(3)))تداخل أنماط الفئات
يمكن أن تتداخل أنماط الفئات. إذ يمكن مطابقة حقل هو نفسه كائن باستخدام نمط فئة آخر.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
@dataclass
class Line:
start: Point
end: Point
line = Line(Point(0, 0), Point(3, 4))
match line:
case Line(start=Point(x=0, y=0), end=Point(x=ex, y=ey)):
print('from origin to', ex, ey)الدمج مع الأنواع المضمّنة
تدعم الأنواع المضمّنة وسيطًا موضعيًا واحدًا يلتقط القيمة. إذ يطابق int(n) عددًا صحيحًا ويربطه بـ n.
def label(value):
match value:
case int(n):
return 'int ' + str(n)
case str(s):
return 'str ' + s
case _:
return 'other'
print(label(7))
print(label('hi'))متى تستخدم أنماط الفئات
استخدم أنماط الفئات عندما تعمل مع كائنات يؤثر نوعها وقيم سماتها معًا في المنطق، مثل كائنات الأحداث أو عُقد AST أو التسلسلات الهرمية للأشكال. فهي تستبدل عمليات التحقق المطوّلة باستخدام isinstance إلى جانب الوصول إلى السمات.
الخلط بين المواضع والكلمات المفتاحية
يمكنك خلط الأنماط الفرعية الموضعية وأنماط الكلمات المفتاحية في نمط فئة واحد، تمامًا كما في استدعاء الدالة. وتستخدم الأنماط الموضعية ترتيب __match_args__، بينما تسمّي أنماط الكلمات المفتاحية السمة صراحةً.
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
z: int
p = Point(1, 2, 3)
match p:
case Point(x, y, z=depth):
print(x, y, depth)تحقق سريع
ما الذي يطابقه النمط Point(x=0, y=y)؟
مراجعة
لقد تعلمت المطابقة مع سمات الكائنات.
- يتحقق
ClassName()من النوع. - يربط
attr=nameالسمات، بينما تتطلب القيم الحرفية قيمًا مطابقة تمامًا. - يتيح
__match_args__المطابقة الموضعية. - تتداخل أنماط الفئات وتنفّذ التفرّع عبر التسلسلات الهرمية للأنواع.
الأسئلة الشائعة
هل درس «أنماط الفئات» مجاني؟
نعم — نص درس «أنماط الفئات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Python Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Python Academy 4 دروس في المجموع.
ماذا ستتعلم في «أنماط الفئات»؟
طابق القيم مع سمات الكائنات تتمرن على Python Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Python Academy؟
لا تُشترط خبرة سابقة. Python Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «أنماط الفئات»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Python Academy هذا؟
نعم. كل درس في Python Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.