LINUX.ORG.RU

История изменений

Исправление Virtuos86, (текущая версия) :

Я тупой

Согласен.

Можно рассматривать self как доступ к неймспейсу экземпляра (инстанса, instance) класса. Чтобы объект мог вызывать свои методы и брать значения из своих же атрибутов, ему надо как-то получить к ним доступ. В глобальном пространстве имен их, естественно, не видно, в локальном — тоже, как быть? Питон пихает в каждый метод экземпляра класса ссылку на него самого («self» внезапно переводится как «сам»), это такое соглашение — пихать первым, хотя можно было и последним и любым по порядку. Еще одно соглашение, но вообще устное и якобы необязательное, это называть self self'ом, потому что в синтаксическом плане это обычный аргумент функции, и его можно именовать как угодно.

Под капотом этот механизм довольно логично устроен и продуман, но человеку, не могущему понять, что переменная «self» в параметрах метода экземпляра класса это ссылка на его неймспейс, до таких деталей скоро не добраться.

А ведь есть еще и cls :D.

Исходная версия Virtuos86, :

Я тупой

Согласен.

Можно рассмативать self как доступ к неймспейсу экземпляра (инстанса, instance) класса. Чтобы объект мог вызывать свои методы и брать значения из своих же атрибутов, ему надо как-то получить к ним доступ. В глобальном пространстве имен их, естественно, не видно, в локальном — тоже, как быть? Питон пихает в каждый метод экземпляра класса ссылку на него самого («self» внезапно переводится как «сам»), это такое соглашение — пихать первым, хотя можно было и последним и любым по порядку. Еще одно соглашение, но вообще устное и якобы необязательное, это называть self self'ом, потому что в синтаксическом плане это обычный аргумент функции, и его можно именовать как угодно.

Под капотом этот механизм довольно логично устроен и продуман, но человеку, не могущему понять, что переменная «self» в параметрах метода экземпляра класса это ссылка на его неймспейс, до таких деталей скоро не добраться.

А ведь есть еще и cls :D.