الأشياء المستمرة و __repr__
-
29-09-2019 - |
سؤال
ماذا سيكون أفضل طريقة للتعامل مع __repr__()
وظيفة لكائن صنع مستمر؟ على سبيل المثال ، واحد يمثل صفًا في قاعدة بيانات (علائقية أو كائن).
وفقا لمستندات بيثون ، __repr__()
يجب إرجاع سلسلة من شأنها إعادة إنشاء الكائن eval()
هذا (تقريبا) eval(repr(obj)) == obj
, أو تدوين قوسين للتمثيلات غير الدقيقة. عادةً ما يعني هذا إلقاء جميع البيانات التي لا يمكن تجديدها بواسطة الكائن في السلسلة. ومع ذلك ، بالنسبة للكائنات المستمرة التي يعيد إنشاء الكائن قد يكون بسيطًا مثل استرداد البيانات من قاعدة البيانات.
لذلك ، بالنسبة لمثل هذه الكائنات ، فإن جميع بيانات الكائنات أو المفتاح الأساسي فقط في __repr__()
سلسلة؟
المحلول
يجب على Repr إرجاع سلسلة من شأنها إعادة إنشاء الكائن باستخدام Eval
هذا أمر قانوني لأنواع بسيطة مثل int أو سلسلة أو تعويم ، ولكن ليس قابلاً للاستخدام لكائن DB متعدد العمود مع أكثر من 15 عمودًا
على سبيل المثال ، إذا كان لدي فئة تمثل السعر ، فسيكون من المعقول عمل __repr__
إظهار الخصائص الرئيسية لها: المبلغ والعملة
def __repr__(self):
return '%s %s'%(self.amount,self.currency)
نصائح أخرى
كيفية الحصول عليها من قاعدة البيانات غير مهتم بشكل عام. إرجاع الطريق لإعادة إنشاء الكائن من الصفر ، على سبيل المثال SomeModel(field1, field2, ...)
.