Jasem Alabdullah نشر 6 مايو أرسل تقرير نشر 6 مايو السلام عليكم انا اشتغل جانغو ورأيت مفهوم في بايثون عن Data classes واتمنى اذا احد يتكرم علي ويشرحلي ايش هي وهل تفيدني وشلون استخدمها 2 اقتباس
0 Mustafa Suleiman نشر 6 مايو أرسل تقرير نشر 6 مايو تلك ميزة جديدة في بايثون 3.7 وما بعدها، لغرض إنشاء كلاسات تحتوي على بيانات فقط (بدون أساليب أخرى)، وتُستخدم لتخزين المعلومات التي ستتم نقلها بين أجزاء مختلفة من البرنامج أو النظام. بالتالي تُسهل إنشاء كلاسات بعدد أسطر أقل من الكود وتُنفذ بشكل ضمني بعض الأساليب الأساسية مثل __init__ و __repr__ و __eq__، وتوفر تمثيلًا نصيًا للكائنات باستخدام __repr__ ومقارنات بسيطة وتحويل البيانات إلى نماذج بيانات أخرى، مثل JSON أو CSV. تستطيع استيراد الديكوريتور @dataclass من وحدة dataclasses ثم استخدامه لتعريف كلاس بيانات: @dataclass class Person: name: str age: int email: str وذلك التعريف يُنشئ فئة Person مع ثلاثة خصائص name من نوع str، age من نوع int، و email من نوع str. ويتم التحقق من نوع البيانات تلقائيًا عند إنشاء مثيل من الفئة، وباستطاعتك تعديل الخصائص بعد إنشاء المثيل، ومقارنة مثيلات الفئة باستخدام عامل المقارنة == @dataclass class Person: name: str age: int email: str person1 = Person("Jasem", 30, "Jasem@example.com") person2 = Person("Jasem", 25, "Jasem@example.com") print(person1.name) print(person2.age) if person1 == person2: print("The persons are equal") else: print("The persons are not equal") 1 اقتباس
1 Ali Ibrahim12 نشر 6 مايو أرسل تقرير نشر 6 مايو (معدل) فئات البيانات في بايثون (Data Classes) تم تقديمها اول مرة من الاصدار 3.7 تقدم طريقة أنظف وأكثر كفاءة لكتابة الClasses التي نحتاج: يوجد العديد من التوابع التي نكتبها بشكل يدوي والتي تقوم ببعض الوظائف الخاصة بالClass معين سوف نتعرف على بعضها ومثال لهذه التوابع التي تسمى ( "dunder" methods ) واهمها عند تعريف Class يجب تعريف الباني (constructor) الخاص به مثال ليكن لدينا الClass الخاص بتعريف عن مستثمر حيث يتعرف عليه ب اسمه و عمره وثروته class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age نلاحظ ضروة استخدام الدالة __init__ لتمكني من تعريف المستثمر i1 = Investor("ali",25,8000) i2 = Investor("Jasem,",20,100000) في حال غياب الباني (constructor) لا يمكن تمرير القيم للكائن واذا اردنا طباعة i1 يظهر نتيجة بشكل غير مفهوم كالاتي : ولحل هذه المشكلة يمكن الاستعانة بالدالة repr نضيفه على Class ونحدد من خلاله القيمة التي نريد ان نطبعا حين طباعة الكائن من الClass : class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age def __repr__(self) -> str: return self.name نعيد طباعة i1 لتظهر قيمة الاسم الخاصة بهذا الكائن كالاتي : واذا اضفنا كائن اخر يشابه في بيانته الكائن الاول كالاتي i1 = Investor("ali",25,8000) i2 = Investor("Jasem,",20,100000) i3 = Investor("ali",25,8000) واختبرنا اذا كان متشابهان نلاحظ انه اعطى قيمة خطأ اي انهما غير متساويين علما لو اختبرنا عن تساوي نفس الكائن يعطي انهما مساويين اي يرجع True ويوجد دالة تساعد هذا Class في تحديد السمة التي نريد المقارنة عليها في حال اردنا تطبيق اختبار المساوات وهي الدالة eq وتعرف بالشكل التالي في حال اردنا ان يقارن على الاسم فقط : class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age def __repr__(self) -> str: return self.name def __eq__(self, Other) -> bool: return self.name == Other.name في حال اعدنا الاختبار تساوي الاولمع الثالث سوف يقول انهما متشابهان كالاتي علما انه ولو غيرنا بالميزات الاخرى كالعمر والرصيد سوف يظل يراهم متشابهان وذلك بسبب تعريفك لدالة التساوي لا يؤثرفيها سوا الاسم مثال: نلاحظ بقائها تعطي انهما متساويين حيث يمكن اضافة ميزة ميزة والتاكد من تساويهما ويعتبر هذا مجهد في حال كان هناك الكثير لذلك سوف نتعرف على فائدة الData Classes التي توفر علينا مجهود هذه العمليات كالتالي : حيث نستدعي dataclass وبعدها نعرف بمفهوم decorator وهو مفهوم في برمجة كائنية التوجه تقوم بنوع من التغليف للوظائف وتعرف في بايثون بالشكل @dataclass يوضع فوق تابع اوكلاس from dataclasses import dataclass @dataclass class Investor: name : str age : int cach : float نلاحظ عدم تعريف تابع باني ولا تابع الاستعراض repr لكن امكننا تعريف كائن منه وعند طباعة الكائن يظهر بمظهر افضل ووفر علينا عناء كتابة التوابع المساعدة السابقة وعند اختبار التساوي اظهر قدرته على معرفة التساوي وعند تغير قيمة يظهر عدم التساوي وهذا شيئ منطقي لانه يقارن على كل البيانات الخاصة بالكائن لذلك نلخص ان dataclass ساعدنا عللى توفير الوقت والجهد في الخوض في معالجة هذه الامور وجعل الكود افضل واكثر احترافية وقابلية للفهم. وهي مفيدة جدا عند التعامل مع الباينات من قواعد البيانات تم التعديل في 6 مايو بواسطة Ali Ibrahim12 1 اقتباس
0 Jasem Alabdullah نشر 6 مايو الكاتب أرسل تقرير نشر 6 مايو بتاريخ 46 دقائق مضت قال Mustafa Suleiman: تلك ميزة جديدة في بايثون 3.7 وما بعدها، لغرض إنشاء كلاسات تحتوي على بيانات فقط (بدون أساليب أخرى)، وتُستخدم لتخزين المعلومات التي ستتم نقلها بين أجزاء مختلفة من البرنامج أو النظام. بالتالي تُسهل إنشاء كلاسات بعدد أسطر أقل من الكود وتُنفذ بشكل ضمني بعض الأساليب الأساسية مثل __init__ و __repr__ و __eq__، وتوفر تمثيلًا نصيًا للكائنات باستخدام __repr__ ومقارنات بسيطة وتحويل البيانات إلى نماذج بيانات أخرى، مثل JSON أو CSV. تستطيع استيراد الديكوريتور @dataclass من وحدة dataclasses ثم استخدامه لتعريف كلاس بيانات: @dataclass class Person: name: str age: int email: str وذلك التعريف يُنشئ فئة Person مع ثلاثة خصائص name من نوع str، age من نوع int، و email من نوع str. ويتم التحقق من نوع البيانات تلقائيًا عند إنشاء مثيل من الفئة، وباستطاعتك تعديل الخصائص بعد إنشاء المثيل، ومقارنة مثيلات الفئة باستخدام عامل المقارنة == @dataclass class Person: name: str age: int email: str person1 = Person("Jasem", 30, "Jasem@example.com") person2 = Person("Jasem", 25, "Jasem@example.com") print(person1.name) print(person2.age) if person1 == person2: print("The persons are equal") else: print("The persons are not equal") تقريباً وصلت الفكرة شكراُ لحضرتك بتاريخ 44 دقائق مضت قال Ali Ibrahim12: فئات البيانات في بايثون (Data Classes) تم تقديمها اول مرة من الاصدار 3.7 تقدم طريقة أنظف وأكثر كفاءة لكتابة الClasses التي نحتاج: يوجد العديد من التوابع التي نكتبها بشكل يدوي والتي تقوم ببعض الوظائف الخاصة بالClass معين سوف نتعرف على بعضها ومثال لهذه التوابع التي تسمى ( "dunder" methods ) واهمها عند تعريف Class يجب تعريف الباني (constructor) الخاص به مثال ليكن لدينا الClass الخاص بتعريف عن مستثمر حيث يتعرف عليه ب اسمه و عمره وثروته class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age نلاحظ ضروة استخدام الدالة __init__ لتمكني من تعريف المستثمر i1 = Investor("ali",25,8000) i2 = Investor("Jasem,",20,100000) في حال غياب الباني (constructor) لا يمكن تمرير القيم للكائن واذا اردنا طباعة i1 يظهر نتيجة بشكل غير مفهوم كالاتي : ولحل هذه المشكلة يمكن الاستعانة بالدالة repr نضيفه على Class ونحدد من خلاله القيمة التي نريد ان نطبعا حين طباعة الكائن من الClass : class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age def __repr__(self) -> str: return self.name نعيد طباعة i1 لتظهر قيمة الاسم الخاصة بهذا الكائن كالاتي : واذا اضفنا كائن اخر يشابه في بيانته الكائن الاول كالاتي i1 = Investor("ali",25,8000) i2 = Investor("Jasem,",20,100000) i3 = Investor("ali",25,8000) واختبرنا اذا كان متشابهان نلاحظ انه اعطى قيمة خطأ اي انهما غير متساويين علما لو اختبرنا عن تساوي نفس الكائن يعطي انهما مساويين اي يرجع True ويوجد دالة تساعد هذا Class في تحديد السمة التي نريد المقارنة عليها في حال اردنا تطبيق اختبار المساوات وهي الدالة eq وتعرف بالشكل التالي في حال اردنا ان يقارن على الاسم فقط : class Investor: def __init__(self,name,age,cach): self.name = name self.age = age self.age = age def __repr__(self) -> str: return self.name def __eq__(self, Other) -> bool: return self.name == Other.name في حال اعدنا الاختبار تساوي الاولمع الثالث سوف يقول انهما متشابهان كالاتي علما انه ولو غيرنا بالميزات الاخرى كالعمر والرصيد سوف يظل يراهم متشابهان وذلك بسبب تعريفك لدالة التساوي لا يؤثرفيها سوا الاسم مثال: نلاحظ بقائها تعطي انهما متساويين حيث يمكن اضافة ميزة ميزة والتاكد من تساويهما ويعتبر هذا مجهد في حال كان هناك الكثير لذلك سوف نتعرف على فائدة الData Classes التي توفر علينا مجهود هذه العمليات كالتالي : حيث نستدعي dataclass وبعدها نعرف بمفهوم decorator وهو مفهوم في برمجة كائنية التوجه تقوم بنوع من التغليف للوظائف وتعرف في بايثون بالشكل @dataclass يوضع فوق تابع اوكلاس from dataclasses import dataclass @dataclass class Investor: name : str age : int cach : float نلاحظ عدم تعريف تابع باني ولا تابع الاستعراض repr لكن امكننا تعريف كائن منه وعند طباعة الكائن يظهر بمظهر افضل ووفر علينا عناء كتابة التوابع المساعدة السابقة وعند اختبار التساوي اظهر قدرته على معرفة التساوي وعند تغير قيمة يظهر عدم التساوي وهذا شيئ منطقي لانه يقارن على كل البيانات الخاصة بالكائن لذلك نلخص ان dataclass ساعدنا عللى توفير الوقت والجهد في الخوض في معالجة هذه الامور وجعل الكود افضل واكثر احترافية وقابلية للفهم. وهي مفيدة جدا عند التعامل مع الباينات من قواعد البيانات شكرا جزيلاً أخ علي على جهدك وأمثلتك الجميلة، تمام اني افتهمت الفكرة 1 اقتباس
السؤال
Jasem Alabdullah
السلام عليكم
انا اشتغل جانغو ورأيت مفهوم في بايثون عن Data classes
واتمنى اذا احد يتكرم علي ويشرحلي ايش هي وهل تفيدني وشلون استخدمها
3 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.