الدوال والفئات
الفئات والكائنات
3 دقيقة للقراءة
الفئات تتيح لك تجميع البيانات والوظائف معاً. أُطر الذكاء الاصطناعي مثل LangChain تستخدم الفئات بشكل مكثف للوكلاء والأدوات والذاكرة.
بنية الفئة الأساسية
class Agent:
"""وكيل ذكاء اصطناعي بسيط."""
def __init__(self, name, model):
"""تهيئة الوكيل."""
self.name = name # سمة المثيل
self.model = model
self.history = [] # كل مثيل له سجله الخاص
def chat(self, message):
"""إرسال رسالة والحصول على استجابة."""
self.history.append({"role": "user", "content": message})
response = f"[{self.name}]: استلمت رسالتك."
self.history.append({"role": "assistant", "content": response})
return response
# إنشاء المثيلات
agent1 = Agent("Claude", "claude-3-opus")
agent2 = Agent("GPT", "gpt-4")
# استخدام المثيل
response = agent1.chat("مرحباً!")
print(agent1.history)
معامل self
self يشير إلى المثيل الحالي. هكذا تصل الطرق إلى بيانات المثيل:
class Counter:
def __init__(self):
self.count = 0 # ينتمي لهذا المثيل
def increment(self):
self.count += 1 # الوصول عبر self
def get_count(self):
return self.count
c1 = Counter()
c2 = Counter()
c1.increment()
c1.increment()
print(c1.get_count()) # 2
print(c2.get_count()) # 0 (مثيل منفصل)
سمات الفئة مقابل سمات المثيل
class Model:
# سمة الفئة (مشتركة بين جميع المثيلات)
api_version = "v1"
def __init__(self, name):
# سمة المثيل (فريدة لكل مثيل)
self.name = name
m1 = Model("gpt-4")
m2 = Model("claude")
print(m1.api_version) # "v1"
print(m2.api_version) # "v1"
print(m1.name) # "gpt-4"
print(m2.name) # "claude"
مثال عملي: فئة الأداة
class Tool:
"""فئة أساسية لأدوات الوكيل."""
def __init__(self, name, description):
self.name = name
self.description = description
def execute(self, **kwargs):
raise NotImplementedError("يجب على الفئات الفرعية تنفيذ execute()")
class SearchTool(Tool):
"""أداة بحث في الويب."""
def __init__(self):
super().__init__(
name="web_search",
description="البحث في الويب عن معلومات"
)
def execute(self, query):
# التنفيذ الفعلي للبحث سيكون هنا
return f"نتائج البحث عن: {query}"
# الاستخدام
search = SearchTool()
result = search.execute(query="دروس بايثون")
الطرق الخاصة
class Message:
def __init__(self, role, content):
self.role = role
self.content = content
def __str__(self):
"""تمثيل نصي قابل للقراءة البشرية."""
return f"{self.role}: {self.content}"
def __repr__(self):
"""تمثيل ملائم للمطور."""
return f"Message(role='{self.role}', content='{self.content}')"
msg = Message("user", "مرحباً")
print(msg) # "user: مرحباً" (يستخدم __str__)
print(repr(msg)) # "Message(role='user', content='مرحباً')"
بعد ذلك، سنتعلم عن dataclasses—طريقة أبسط لتعريف فئات تحمل البيانات. :::