2016-12-09 3 views
5

Я читал страницы документации по сфинксу и иронически обнаружил, что документации по разнице между var, ivar и cvar очень не хватает. Мне было интересно, может ли кто-нибудь объяснить разницу между каждым из разных пространств имен в встроенном коде.В чем разница между var, cvar и ivar в sphinx python?

Пример:

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

Как каждый из этих сфинксов теги отличаются друг от друга, и, как я знаю, какой из них является правильным, чтобы правильно использовать как задумано?

ответ

1

Может быть, не беспокоиться о различии между thesr определенными тегами и просто придерживаться использования «вар», если вам нужно использовать его на всех, поскольку документация указывает на то, что:

Есть много других полей Info, но они могут быть избыточными: ... (включая) ... var, ivar, cvar: Описание переменной. ...

См:

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

+1

«Есть много других полей Info, но они могут быть избыточными» Я хотел бы, чтобы это было более конкретным, чтобы были ли они избыточны. Я почти не верю, потому что это не имеет смысла, хотя это может быть очень хорошо. Любые другие выводы, с которыми мы могли бы это проверить? –

8

var является общей переменной, конечно. Используйте это, когда вы не хотите делать какие-либо дополнительные различия в переменной, которую вы документируете.

ivar является «переменной экземпляра» или переменной, заданной для экземпляра объекта (экземпляра класса). Обычно они будут определены (в Python) внутри метода __init__.

cvar - это «переменная класса» или переменная, которая непосредственно устанавливается на объект класса. Как правило, это должно быть установлено внутри оператора класса, но вне любого конкретного метода в классе.

Вот пример:

class SomeClass(object): 

    cvar = 'I am a class variable' 

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