2016-12-09 51 views
5

Przeczytałem strony dokumentacji sfinksa i ironicznie stwierdziłem, że brakuje dokumentacji dotyczącej różnicy między var, ivar i cvar. Zastanawiałem się, czy ktoś mógłby wyjaśnić różnicę między każdą z różnych przestrzeni nazw w kodzie inline.Jaka jest różnica między var, cvar i ivar w sfinksie Pythona?

Przykład:

class foo(object): 
    """ 
     :var str first: 
     :ivar str last: 
     :cvar str middle: 
    """ 

Jak każdy z tych tagów Sphinx różnią się od siebie, a skąd mam wiedzieć, który z nich jest poprawna z nich korzystać poprawnie zaprojektowane?

Odpowiedz

1

Może nie martw się o rozróżnienie między thesr specyficznych znaczników i po prostu trzymać się przy użyciu „var”, jeśli chcesz go używać w ogóle, ponieważ dokumentacja wskazuje, że:

Istnieje wiele innych dziedzin Informacje ale mogą być zbędne: ... (w tym) ... var, ivar, cvar: Opis zmiennej. ...

Patrz:

http://thomas-cokelaer.info/tutorials/sphinx/docstring_python.html

+1

„Istnieje wiele innych dziedzin Informacje ale mogą być zbędne” Żałuję, że to był bardziej konkretny co do tego, czy były one zbędne. Prawie w to nie wierzę, bo to nie ma sensu, choć może tak być. Jakieś inne kontakty, które moglibyśmy zweryfikować? –

8

var jest zmienną rodzajowy, oczywiście. Skorzystaj z tego, gdy nie chcesz wprowadzać dalszych rozróżnień na temat zmiennej, którą dokumentujesz.

ivar jest "zmienną instancji" lub zmienną ustawioną w obiekcie instancji (instancji klasy). Zazwyczaj będą one zdefiniowane (w języku Python) wewnątrz metody __init__.

cvar jest "zmienną klasy" lub zmienną ustawioną bezpośrednio w obiekcie klasy. Zazwyczaj będzie to ustawione wewnątrz instrukcji klasy, ale poza jakąkolwiek określoną metodą w klasie.

Oto przykład:

class SomeClass(object): 

    cvar = 'I am a class variable' 

    def __init__(self): 
     self.ivar = 'I am an instance variable'