سؤال

هل من الممكن استخدام مفهوم الدكتوراه في بيثون للدروس ، وليس فقط الوظائف؟

إذا كان الأمر كذلك ، فأين سأضع الدكتوراه - في الدكتوراه في الفصل ، أو في مستندات المنشئ؟

للتوضيح ، أنا أبحث عن شيء مثل:

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()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top