2012-11-22 13 views
9

Chciałbym użyć bloku komentarza doctest, aby zademonstrować użycie konkretnej klasy bazowej, ale nie można tego zrobić za pomocą doctest lub robię coś nie tak. Oto mój prosty kod demonstracyjny.Python: Jak zdefiniować klasę w 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()  

Kod nie działa. Oto pierwszy błąd:

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: Mój błąd; post wohle został niepoprawnie sformatowany i ponownie przekierowałem tę sekcję do reszty klasy. –

Odpowiedz

14

Wypróbuj w tłumaczu; używa ..., aby wyświetlić linie kontynuacji. >>> jest tylko dla nowego oświadczenia lub wyrażenie, natomiast class w niepełny aż miałeś pustą linię ... kontynuacyjny:

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

Wielkie dzięki, działa teraz jak urok! Kolejnym problemem, z którym się zetknąłem, było to, że znaki nowej linii, jak w "jakiś łańcuch \ n", powodują kłopoty. Zamieniłem je na + os.sep. Na wypadek, gdyby ktoś inny z tym samym pytaniem to przeczytał. – Sven

+1

@Sven: 'os.sep'? Dlaczego nie * podwaja * zamiast '' '' '' '? 'os.sep' to na przykład'/'na platformach UNIX. –

+1

Mój zły. Masz rację, a ja miałem na myśli os.linesep. – Sven

Powiązane problemy