2016-09-08 2 views
0

В чем разница между ключевыми словами self и экземплярами в Python 3?Python's self vs instance

Я вижу подобный код,

def update(self, instance, validated_data): 
    """ 
    Update and return an existing `Snippet` instance, given the validated data. 
    """ 
    instance.title = validated_data.get('title', instance.title) 
    instance.code = validated_data.get('code', instance.code) 
    instance.linenos = validated_data.get('linenos', instance.linenos) 
    instance.language = validated_data.get('language', instance.language) 
    instance.style = validated_data.get('style', instance.style) 
    instance.save() 
    return instance 
+1

Ни одно из ключевых слов. https://docs.python.org/3/reference/lexical_analysis.html#keywords –

+0

Это выглядит как Django. Следуйте документации Django. Добавьте тег Django в следующий раз, когда вы используете stackoverflow. Не предполагайте, что Django всегда следует повседневному способу делать вещи в Python, потому что это не так. В частности, он использует «декларативный» шаблон для построения сложных классов. Он работает в соответствии с его документацией. Существует некоторая довольно глубокая «магия» за кулисами, о которой большинство программистов совершенно не об этом знать. – nigel222

+0

отметил, я добавил Django Tag. – djangog

ответ

1

Ни self ни instance - это ключевые слова в Python. Идентификатор self используется в качестве первого параметра методов экземпляра в классе. Экземпляр объекта, по которому вызывается метод, автоматически передается в качестве первого параметра.

В приведенном выше фрагменте update, скорее всего, является методом некоторого класса, а self представляется обычным первым параметром, как описано выше. Второй параметр instance - это еще один параметр, а имя instance не имеет никакого значения в Python.

1

Сниппет немного короткий, но instance не является ключевым словом (ни self, что это просто условность).

Это аргумент другому экземпляру другого (возможно, такого же) класса.

1

Вопрос довольно универсальна, но позвольте мне увидеть, если я могу пролить некоторый свет на это для вас:

self относится к классу (по соглашению, а не ключевое слово), из которых update является. Класс имеет переменные и методы, и вы можете обратиться к ним с self ключевым словом (не зарезервированное ключевым словом) по телефону self.update(instance, validated_data)

В случае приведенном выше фрагмента кода, self относится к классу. instance скорее всего, относится к некоторым model например «большой намек является instance.save() и validated_data является словарь или класса объектов с атрибутами вы get чал и присвоением instance атрибутов перед сохранением их

Надеется, что это помогает

+1

Значение Python автоматически присваивает первому аргументу в методе (в этом случае аргумент называется «self», что является соглашением Python) делает * not * ссылкой на класс. Он содержит ссылку на конкретный * экземпляр * класса. –

+1

'сам'. ** нет ** обратитесь к классу. 'self' относится к текущему экземпляру класса. – Matthias

+0

Да, я согласен, что ответ выше неправильный. – djangog

Смежные вопросы