目次
1. ما هي الحاجة إلى الهياكل في Python؟
Python هي لغة برمجة عالية المستوى ولا تحتوي على ميزة “الهياكل” بشكل مباشر كما في لغة C. ومع ذلك، عند الحاجة إلى التعامل مع بيانات مترابطة متعددة كوحدة واحدة، قد نرغب في وجود بنية مشابهة للهياكل في C. يظهر هذا بشكل خاص عند إدارة المعلومات من قواعد البيانات، أو معالجة الملفات، أو في اتصالات الشبكة حيث تكون هناك حاجة لمعالجة البيانات بكفاءة.متى نشعر بالحاجة إلى الهياكل؟
في السيناريوهات التالية، تكون طرق إدارة البيانات التي تعادل الهياكل في Python مفيدة للغاية:- إدارة كمية كبيرة من البيانات المترابطة: على سبيل المثال، عند الحاجة إلى إدارة بيانات المستخدمين أو بيانات المنتجات التي تحتوي على عدة خصائص.
- معالجة الملفات أو اتصالات الشبكة: عند الحاجة إلى ضغط وفك ضغط البيانات الثنائية أو إرسال البيانات بتنسيق معين، تكون طرق الإدارة المشابهة لهياكل C فعّالة.
2. محاكاة الهياكل باستخدام dataclass
في Python
تم تقديم dataclass
في Python 3.7 وهو أداة قوية لتعريف الأصناف بشكل مبسط والتعامل مع البيانات بطريقة تشبه الهياكل. توفر dataclass
مرونة أكبر تتماشى مع طبيعة Python مقارنةً بالهياكل في لغة C.الاستخدام الأساسي والأمثلة العملية لـ dataclass
يسمح dataclass
بتعريف الهياكل البيانية ببساطة دون الحاجة إلى كتابة دوال يدوية. المثال التالي يوضح ذلك:from dataclasses import dataclass
@dataclass
class Book:
title: str
author: str
price: float
في هذا المثال، يتم تعريف صنف بيانات باسم Book
. يتم تهيئة الحقول تلقائياً باستخدام الدالة __init__
، مما يسهل إنشاء الكائنات.book1 = Book("Python入門", "佐藤", 2800)
print(book1) # الناتج: Book(title='Python入門', author='佐藤', price=2800)
الخصائص المتقدمة لـ dataclass
يمكنك أيضاً تحديد قيم افتراضية للحقول، مما يسهل التعامل مع الحقول الاختيارية:@dataclass
class Product:
name: str
price: float = 0.0 # القيمة الافتراضية
بهذه الطريقة، يعد dataclass
أداة قوية لإدارة البيانات البسيطة بطريقة واضحة وقابلة للقراءة.
3. استخدام وحدة struct
في Python لمحاكاة الهياكل
توفر وحدة struct
في Python طريقة مشابهة جداً للهياكل في لغة C، خصوصاً في التعامل مع ضغط وفك ضغط البيانات الثنائية، مما يجعلها مفيدة في اتصالات الشبكة ومعالجة الملفات.الاستخدام الأساسي لوحدة struct
الكود التالي يوضح كيفية ضغط عدد صحيح وعدد عشري إلى سلسلة بايت ثم فكها:import struct
# ضغط عدد صحيح وعدد عشري
packed_data = struct.pack('if', 1024, 3.14)
print(packed_data)
# فك ضغط البيانات
unpacked_data = struct.unpack('if', packed_data)
print(unpacked_data)
باستخدام struct
، يمكن تحديد تنسيقات البيانات (مثل i
للأعداد الصحيحة و f
للأعداد العشرية) لإدارة البيانات بكفاءة.التعامل مع أنواع بيانات أكثر تعقيداً
يمكن لـstruct
التعامل مع عدة أنواع بيانات في آن واحد:packed_data = struct.pack('i4sf', 1, b'test', 2.7)
print(packed_data)
unpacked_data = struct.unpack('i4sf', packed_data)
print(unpacked_data)

4. متى نستخدم dataclass
ومتى نستخدم struct
؟
لكل من dataclass
وstruct
خصائص مختلفة:متى نستخدم dataclass
؟
- عند الحاجة إلى إدارة بيانات بسيطة: مثالي لتخزين بيانات المستخدمين أو المنتجات في تطبيقات الويب.
- عند التركيز على الوضوح والمرونة: يساعد على كتابة كود أكثر قابلية للقراءة والصيانة.
متى نستخدم struct
؟
- عند التعامل مع البيانات الثنائية: مثل اتصالات الشبكة أو ملفات ثنائية.
- عند الحاجة إلى كفاءة عالية في استخدام الذاكرة: لإدارة بيانات ضخمة كسلاسل بايت.
5. أمثلة عملية على استخدام الهياكل
مثال dataclass
: نظام إدارة بيانات المنتجات
from dataclasses import dataclass
@dataclass
class Product:
name: str
price: float
stock: int
product1 = Product("كمبيوتر محمول", 150000, 30)
product2 = Product("هاتف ذكي", 80000, 50)
print(product1)
مثال struct
: إرسال واستقبال البيانات الثنائية عبر الشبكة
import struct
data_to_send = struct.pack('i4sf', 42, b'data', 7.5)
print(data_to_send)
received_data = struct.unpack('i4sf', data_to_send)
print(received_data)

6. الخلاصة
باستخدامdataclass
وstruct
في Python، يمكنك تحقيق أقصى قدر من الكفاءة والمرونة في إدارة البيانات:dataclass
: لتعريف هياكل بيانات خفيفة وبسيطة مع تحسين قابلية القراءة والصيانة.struct
: للتعامل مع البيانات الثنائية بفعالية مع كفاءة عالية في الذاكرة.