Рубрики
Без рубрики

Python Self – интерактивный гид с видео

https://www.youtube.com/embed/j54_EPYJcgA Многие начинающие, которые просто начинаются с объектно-ориентированным программированием в Python, путают с целью ключевого слова «Я». Давайте решим эту путаницу раз и для всех! Название Self является конвенцией, название первого аргумента метода класса Python. Переменные самооценки в конкретный экземпляр на … Python Self – интерактивный гид с видео Подробнее »

Автор оригинала: Chris.

Многие начинающие, которые просто начинаются с объектно-ориентированным программированием в Python, путают с целью ключевого слова «Я». Давайте решим эту путаницу раз и для всех!

Имя Я В соответствии с Конвенцией название первого аргумента метода класса Python. Переменная Я Указывает на конкретный экземпляр, на котором называется метод. Он используется в способе доступа к атрибутам и другим методам того же экземпляра. Вызывающий абонент метода явно не передает экземпляр в себя, а покидает его интерпретатору Python, чтобы автоматически пройти его. Например, учитывая объект Автомобиль Python автоматически преобразует метод вызова Car.Drive () к Драйв (Self = Car) Отказ

Давайте посмотрим на практический пример.

class SoccerPlayer:


    def __init__(self, health, salary):
        
        self.health = health
        self.salary = salary

    def foul(self, player):
        
        player.health = 0
        self.salary = self.salary + 10**6


ronaldo = SoccerPlayer(100, 10**7)
beckham = SoccerPlayer(100, 10**6)

ronaldo.foul(beckham)

В фрагменте кода вы создаете класс Футболист с двумя Методы __init__ и Фол Отказ Первые аргументы методов, названные Я , являются ссылками на экземпляр, который называет его.

В Метод конструктора __init__ , Python динамически добавляет новые атрибуты экземпляра к экземпляру вызова, обозначаемых как здоровье и зарплата Отказ

Созданы два экземпляра футболистов: Роналду и Бекхэм . Вы тогда называете Фол () Метод на Роналду пример. При звонке метода вам не нужно явно определить Я Аргумент – Python делает это для вас. Требуется ссылка на Роналду экземпляр и передает его как первый аргумент, называемый Я , в Фол () метод.

Фол оказывает негативное влияние на здоровье жертвы. Так как Роналдо фол, потому что здоровье Бекхэма снижается и устанавливается на ноль. В то же время зарплата Роналду подходит на 1 000 000 единиц – не спрашивайте меня, почему.

Давайте посмотрим на головоломку, которая так далеко проверяет ваше понимание. Можете ли вы решить это?

# PUZZLE:
print(beckham.health)
print(ronaldo.health)

print(beckham.salary)
print(ronaldo.salary)
# What's the output of all four lines?

Упражнение : Какая вывод этого кода фрагмент?

Вы можете проверить, правильно ли ваше предположение в следующем интерактивной оболочке кода. Просто нажмите «Беги» и посмотрите результат!

Объяснение : Задача этой головоломки – это дифференцировать экземпляр ссылок Self и Player в рамках Фол () метод.

Таким образом, результат следующий:

  • Beckham.health уменьшает 0
  • Ronaldo.health остается 100.
  • Beckham.Salary пребывает 1 000 000 человек
  • Ronaldo.Salary увеличивается до 11 000 000

Теперь давайте сделаем это немного сложнее, мы будем?

class SoccerPlayer:


    def __init__(self, health, salary):
        
        self.health = health
        self.salary = salary

    def foul(self, player):
        
        player.health = 0
        self.salary = self.salary + 10**6


ronaldo = SoccerPlayer(100, 10**7)
beckham = SoccerPlayer(100, 10**6)

SoccerPlayer.foul(beckham, ronaldo)

print(beckham.health)
print(ronaldo.health)

print(beckham.salary)
print(ronaldo.salary)

Головоломка похожа на вышеуказанную, но с важной разницей: вы называете Фол () метод на классе, а не каким-либо конкретным экземпляром. Это имеет преимущество, что мы можем явно определить все аргументы, включая Я аргумент Таким образом, мы можем динамически решить, какие силы не содержат, какие другие экземпляры. В этой головоломке Бекхэм Фолы Роналду Отказ Таким образом, Бекхэм получит удар зарплаты и роналдо здравоохранения:

  • Beckham.health остается 100.
  • Ronaldo.health уменьшает до 0
  • Beckham.Salary удваивает до 2 000 000
  • Ronaldo.Salary остается на скромном 10 000 000

Заключение

Таким образом, Я Аргумент похож на «это» в Java или «@» на некоторых других языках. Семантически это относится к экземпляру, на котором метод изменяет данные. Тем не менее, Python не мешает способу изменять данные других экземпляров.

Тем не менее, Я Аргумент не является зарезервированным ключевым словом в Python. Вы можете назвать это все, что вы хотите. Тем не менее, вы не должны делать это, как упомянуто выше. Это явно нарушает ожидания всех других кодеров Python.

Было несколько голосов, которые просили, чтобы Я Аргумент должно быть зарезервированным ключевым словом в будущих версиях Python. Но создатель Python Гвидо Ван Россом Явно защитил текущее использование Я в Его статья Отказ Хотя статья написана много лет назад, основные аргументы (и против) самообслуживания все еще проводятся.

Вот два его аргумента из статьи, почему Я должен остаться как:

” Существует довольно хороший аргумент, что требует явного «я» в списке параметров, укрепляет теоретическую эквивалентность между этими двумя способами вызова метода, учитывая, что «FO» является экземпляром «C»:

foo.meth(arg) == C.meth(foo, arg)

« Другим аргументом для сохранения явного« я »в списке параметров – это возможность динамически изменять класс, выкаживая функцию в нее, что создает соответствующий метод. Например, мы могли бы создать класс, который полностью эквивалентен «C» выше следующим образом:

# Define an empty class:
class C:
   pass

# Define a global function:
def meth(myself, arg):
   myself.val = arg
   return myself.val

# Poke the method into the class:
C.meth = meth

Есть причина, почему Гвидо сохранил свое место на вершине за это много лет!

Я просто хочу отметить, что второй аргумент также то, что мы обсуждали выше: позвоните в метод в классе и определите Самоусполнение явно вместо того, чтобы дать ему питон сделать для нас.

Куда пойти отсюда?

Забыть то, что они вам говорят. Вы должны знать основы Python наизусть. Если вы даже не можете написать маленький фрагмент кода без гуглинга ключевых слов, стандартных стандартов PEP или основной функциональности, вы серьезно вредаете вашу продуктивность кодирования.

Чтобы научить вас основы, я создал 5 бесплатных читов, которые учат вам всего, что вам нужно знать, чтобы начать. Заполните свою электронную почту, скачайте чит-листы, распечатайте их и опубликуйте их в туалетную стену! 🤓.

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python одноклассники (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.

Оригинал: “https://blog.finxter.com/self-in-python/”