بيثون: استخدام الدكتوراه للدروس
-
01-10-2019 - |
سؤال
هل من الممكن استخدام مفهوم الدكتوراه في بيثون للدروس ، وليس فقط الوظائف؟
إذا كان الأمر كذلك ، فأين سأضع الدكتوراه - في الدكتوراه في الفصل ، أو في مستندات المنشئ؟
للتوضيح ، أنا أبحث عن شيء مثل:
class Test:
"""
>>> a=Test(5)
>>> a.multiply_by_2()
10
"""
def __init__(self, number):
self._number=number
def multiply_by_2(self):
return self._number*2
شكرا مقدما،
آدم
المحلول
أنت تفتقد الرمز لتشغيل الدكتوراه بالفعل في أسفل الملف:
class Test:
<snip>
if __name__ == "__main__":
import doctest
doctest.testmod()
أما بالنسبة للمكان الذي تضع فيه الاختبارات:
- إذا كان يختبر الفصل ككل ، فأنا أضعهم في الفصل الدراسي.
- إذا كان يختبر المُنشئ ، فسأضعه في مستندات المنشئ.
- إذا كانت تختبر طريقة (كما يبدو في هذه الحالة) ، فأنا في الواقع أضعها في مستندات هذه الطريقة.
نصائح أخرى
بدلاً من إنشاء الكائن في كل طريقة ، يمكنك استخدام extraglobs
جدال:
class Test:
def multiply_by_2(self):
"""
>>> t.multiply_by_2()
10
"""
return self._number*2
if __name__ == '__main__':
import doctest
doctest.testmod(extraglobs={'t': Test()})
تبحث وحدة Doctest عن أي docstrings في ملف وتنفيذ أي رمز مضمن فيه ، لذلك نعم من الممكن استخدام Doctest للفصول.
بالنسبة إلى ما إذا كان من الأفضل وضع الدكتوراه في دكتوراه في الفصل أو المُنشئ ، أعتقد أن هذا يعتمد على ما توثقه بالضبط.
إذا أعطت Docstring نظرة عامة عامة على الفصل وكيفية استخدامها ، فأعتقد أنه من الأفضل وضعه في الفصل.
إذا كان docstring يدور حول كيفية إنشاء مثيلات من الفصل ، فيجب أن يذهب في __init__
طريقة.
تذكر أن نية الدكتوراه هي في المقام الأول أن يكون لها رمز مثال على ذاتيا في الوثائق ، لذلك يجب أن يأخذ جانب الوثائق الأولوية على جانب الاختبار.
يحرر:
في مثالك أعلاه ، لا يوجد رمز لتنفيذ الدكتوراه - الجري python test.py -v
سيتم تنفيذ رمز Python الرئيسي الذي يحدد الفئة فقط.
تحتاج إلى إضافة هذا إلى نهاية الملف:
if __name__ == "__main__":
import doctest
doctest.testmod()
بدلاً من ذلك ، إذا كنت تستخدم Python 2.6 أو لاحقًا قم بتشغيله مع:
python -m doctest -v test.py
أعتقد أن وثائق وحدة الدكتوراه لا تفسر كيفية التعامل مع هذا ، ويجب أن تفعل أفضل في شرح ما يجب القيام به.
النمط الذي اكتشفته للاختبار طرق فئة لا تحتاج إلى بيانات مثيل ، ولكن قد يحتاج إلى الوصول إلى بيانات الفئة ، هو تمرير كائن الفئة بدلاً من مثيل.
class Test:
"""
>>> Test.multiply_by_3(Test,2)
6
"""
def __init__(self, number):
self._number=number
_THREE = 3
def multiply_by_3(self, x):
return x*self._THREE
if __name__ == "__main__":
import doctest
doctest.testmod()