0Pricing
Python Academy · درس

سمات الكائنات مقابل سمات الفئات

ميّز بين البيانات الخاصة بكل كائن والبيانات المشتركة على مستوى الفئة

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

مقدمة

يساعد فهم الفرق بين سمات المثيل وسمات الفئة على منع الأخطاء الخفية، كما يتيح مشاركة الحالة بكفاءة.

سمة الفئة

class Dog: legs = 4 — السمة legs مشتركة بين جميع المثيلات. ويمكن الوصول إليها باستخدام Dog.legs أو dog.legs.
class Dog:
    legs = 4
print(Dog.legs)
print(Dog().legs)

سمة المثيل

تُعد self.name = name في __init__ سمة خاصة بكل مثيل. ولكل Dog قيمة name الخاصة به.
class Dog:
    def __init__(self, name):
        self.name = name
d1 = Dog('Rex')
d2 = Dog('Buddy')
print(d1.name, d2.name)

ترتيب البحث عن السمات

تتحقق Python أولًا من قاموس المثيل __dict__، ثم من قاموس الفئة __dict__، ثم من الفئات الأساسية. وتحجب سمات المثيل سمات الفئة.
class C:
    x = 10
c = C()
c.x = 99  # instance shadows class attr
print(c.x)  # 99
print(C.x)  # 10

مشكلة سمة الفئة القابلة للتغيير

class C: items = [] — تشترك جميع المثيلات في القائمة نفسها. وتؤثر الإضافة من أحد المثيلات في جميع المثيلات الأخرى!
class C:
    items = []
C.items.append(1)
print(C().items)  # [1] — shared!

حل مشكلة القيم القابلة للتغيير

انقل التهيئة إلى __init__: def __init__(self): self.items = [] عندها يحصل كل مثيل على قائمته الخاصة.
class C:
    def __init__(self):
        self.items = []
c1 = C(); c2 = C()
c1.items.append(1)
print(c1.items, c2.items)

فحص __dict__

يمثل obj.__dict__ قاموس سمات المثيل. ويمثل Class.__dict__ قاموس سمات الفئة.
class Dog:
    legs = 4
    def __init__(self, name): self.name = name
d = Dog('Rex')
print(d.__dict__)
print(Dog.__dict__.keys())

طرق الفئة كمنشئات

تتلقى @classmethod المعلمة cls (الفئة) بدلًا من self. استخدمها كمنشئات بديلة.
class Date:
    def __init__(self, y, m, d): self.y,self.m,self.d=y,m,d
    @classmethod
    def from_string(cls, s):
        y,m,d=map(int,s.split('-'))
        return cls(y,m,d)
dt=Date.from_string('2024-01-15')
print(dt.y,dt.m,dt.d)

الطرق الساكنة

لا تتلقى @staticmethod self أو cls. استخدمها لدوال الأدوات المرتبطة منطقيًا بفئة، لكنها لا تحتاج إلى المثيل أو الفئة.
class MathUtils:
    @staticmethod
    def add(a, b): return a + b
print(MathUtils.add(3, 4))

تتبّع المثيلات باستخدام سمة الفئة

يمكن استخدام سمة فئة بوصفها عدّادًا لتتبّع عدد المثيلات التي أُنشئت.
class Widget:
    count = 0
    def __init__(self):
        Widget.count += 1
Widget(); Widget(); Widget()
print(Widget.count)

hasattr() و vars()

يتحقق hasattr(obj, 'name') من وجود السمة. ويكافئ vars(obj) التعبير obj.__dict__.
class P:
    def __init__(self, x): self.x = x
p = P(5)
print(hasattr(p, 'x'), hasattr(p, 'z'))
print(vars(p))

تحقق سريع

ماذا يحدث عند الإضافة إلى قائمة سمة فئة قابلة للتغيير من أحد المثيلات؟

مراجعة

سمات الفئة مشتركة، أما سمات المثيل فتخص كل كائن. ويحجب المثيل سمة الفئة عند البحث. هيّئ القيم القابلة للتغيير داخل __init__. استخدم @classmethod لطرق المصنع.

واصل التقدم

ممتاز! تابع إلى الدرس التالي لتعميق مهاراتك.

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

هل درس «سمات الكائنات مقابل سمات الفئات» مجاني؟

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

ماذا ستتعلم في «سمات الكائنات مقابل سمات الفئات»؟

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

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

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

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

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

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

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

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

  1. الفئات والطريقة __init__
  2. سمات الكائنات مقابل سمات الفئات
  3. طرق الكائن وself
  4. الطرق السحرية: __str__ و__repr__
← العودة إلى Python Academy