2012-11-22 25 views
9

Vorrei utilizzare un blocco di commenti doctest per dimostrare l'utilizzo di una particolare classe di base, ma questo non può essere fatto con doctest o sto facendo qualcosa di sbagliato. Ecco il mio semplice codice demo.Python: come posso definire una classe in un doctest?

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()  

Il codice non viene eseguito. Ecco il primo errore:

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: Il mio errore; il post di wohle era formattato in modo errato e ho reindustrato quella sezione con il resto della classe. –

risposta

14

Provalo nell'interprete; usa ... per mostrare le linee di continuazione. >>> è solo per un nuovo dichiarazione o di espressione, mentre un class nel incompleta fino a quando hai avuto un vuoto linea ... continuazione:

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

Grazie mille, ora funziona come un incantesimo! Un altro problema collaterale in cui mi sono imbattuto era che le nuove righe come in "qualche stringa \ n" causavano problemi. Li ho sostituiti con + os.sep. Nel caso in cui qualcun altro con la stessa domanda legge questo. – Sven

+1

@Sven: 'os.sep'? Perché non * double * il '' \ '' a '\\ n' invece? 'os.sep' è'/'su piattaforme UNIX, per esempio. –

+1

Il mio male. Hai ragione, intendevo os.linesep. – Sven

Problemi correlati