2012-11-22 15 views
9

Ich möchte einen Doctest Kommentar Block verwenden, um die Verwendung einer bestimmten Basisklasse zu demonstrieren, aber entweder kann dies nicht mit Doctest getan werden, oder ich mache etwas falsch. Hier ist mein einfacher Democode.Python: Wie kann ich eine Klasse in einem Doctest definieren?

class MyClass(object): 
    ''' 
    >>> m = MyClass() 
    >>> print m.x 
    1 
    >>> class A(MyClass): 
    >>> def __init__(self): 
    >>> super(A,self).__init__() 
    >>> 
    >>> a = A() 
    >>> print a.x 
    1 
    ''' 


    def __init__(self): 
     self.x = 1 


if __name__ == "__main__": 
    import doctest 
    doctest.testmod()  

Der Code wird nicht ausgeführt. Hier ist der erste Fehler ausgegeben:

Failed example: 
class A(MyClass): 
Exception raised: 
Traceback (most recent call last): 
    File "C:\Python27\lib\doctest.py", line 1254, in __run 
    compileflags, 1) in test.globs 
    File "<doctest __main__.MyClass[2]>", line 1 
    class A(MyClass): 
        ^
SyntaxError: unexpected EOF while parsing 
+0

@avasal: Mein Fehler; der wohle Post wurde falsch formatiert und ich habe diesen Abschnitt mit dem Rest der Klasse neu eingeordnet. –

Antwort

14

Probieren Sie es im Interpreter aus; Es verwendet ..., um Fortsetzungszeilen anzuzeigen. >>> ist nur für eine neue Anweisung oder ein Ausdruck, während ein class in unvollständig, bis Sie eine leere ... Fortsetzung Linie habe:

>>> class A(MyClass): 
    ...  def __init__(self): 
    ...   super(A, self).__init__() 
    ... 
+0

Vielen Dank, funktioniert jetzt wie ein Charme! Ein anderes Problem, auf das ich stieß, war, dass Zeilenumbrüche wie in "some string \ n" Probleme verursachen. Ich ersetzte sie durch + os.sep. Nur für den Fall, dass jemand mit derselben Frage das liest. – Sven

+1

@Sven: 'os.sep'? Warum verdopple * nicht stattdessen das '' '' '' '' \ '' '? 'os.sep' ist'/'zum Beispiel auf UNIX-Plattformen. –

+1

Mein schlechtes. Du hast Recht, und ich meinte os.linesep. – Sven

Verwandte Themen