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

Понимание переменной self в Python с примерами

Python Self Cariany используется для связывания экземпляра класса к методу экземпляра. Мы должны явно объявлять его как первый аргумент метода для доступа

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

Понимание переменной self в Python с примерами

Python Self переменная используется для связывания экземпляра класса к методу экземпляра. Мы должны явно объявлять его как первый аргумент метода для доступа к переменным и методам экземпляра. Эта переменная используется только с методами экземпляра.

В большинстве объектно-ориентированных языков программирования вы можете получить доступ к текущему объекту в методе без необходимости явно иметь его в качестве параметра метода. Например, мы можем использовать ключевое слово « это » для доступа к текущему объекту в программе Java. Но в Python мы должны явно объявлять экземпляр объекта как «самостоятельно» переменной.

Python Self – это ключевое слово?

Python Self Cariable не является зарезервированным ключевым словом. Но это лучшая практика и конвенция для использования имени переменной как «я» для обозначения экземпляра.

Пример self переменной Python

Скажем, у нас есть класс собаки, определенный как ниже.

class Dog:

    def __init__(self, breed):
        self.breed = breed

    def bark(self):
        print(f'{self.breed} is barking.')


d = Dog('Labrador')
d.bark()

Выход : Лабрадор лает.

  • Функция __init __ () определяется двумя переменными, но когда мы создаем экземпляр собак, мы должны предоставить только один аргумент. «Self» автоматически назначается на вновь созданный экземпляр класса собака.
  • Метод CARE () имеет только один аргумент – «Self», который получает связывание с экземпляром собаки, которая вызывает этот метод. Вот почему мы не передаем никаких аргументов при вызове метода коры ().
  • Если мы должны получить доступ к любой переменную экземпляра в функции, мы можем использовать оператор DOT.

Можем ли мы пропустить переменную «Self»?

Что, если метод экземпляра не должен получить доступ к переменным экземпляра. Можем ли мы пропустить самостоятельную переменную в этом случае?

Давайте узнаем простым примером.

class Dog:

    def bark():
        print('Barking')

d = Dog()
print("Done")

Если вы запустите вышеуказанный код, не будет никакой ошибки. Но мы не называем методом коры (). Давайте посмотрим, что произойдет, когда мы пытаемся позвонить в метод коры ().

d = Dog()
d.bark()
Способ класса Python без ошибки самообслуживания

Мы получаем ошибку как метод коры () принимает 0 аргумент, но мы предоставили 1. Это потому, что когда мы звоним D.BARK () , экземпляр «D» автоматически передается как первый аргумент метода экземпляра коры ().

Но, если мы получим доступ к методу экземпляра коры () через ссылку на класс, то она будет работать нормально. Итак, позвонив Dog.bark () не приведет к ошибкам.

Подобные переменные для метода класса и статический метод?

Такое же поведение присутствует с классовыми методами тоже. Единственное отличие состоит в том, что Конвенция состоит в том, чтобы использовать « CLS » как имя переменной для ссылки на класс.

class Dog:

    @classmethod
    def walk(cls):
        print('Dog is Walking')


Dog.walk()

Однако он не требуется со статическим методом. Поскольку статические методы являются самодостаточными функциями, и они не могут получить доступ к любым из переменных классов или функций напрямую.

Давайте посмотрим на полный пример с Я и CLS Переменные и статический метод без каких-либо аргументов.

class Dog:

    def __init__(self, breed):
        self.breed = breed

    @classmethod
    def walk(cls):
        print('Dog is Walking')

    # instance method
    def bark(self):
        print(f'{self.breed} is barking.')

    @staticmethod
    def add(x, y):
        return x + y


Dog.walk()
d = Dog('Labrador')
d.bark()
print(Dog.add(10, 20))

Выход:

Dog is Walking
Labrador is barking.
30

Быстрый пример, чтобы сломать конвенцию

Этот пример просто показать вам, что не обязательно использовать имя переменной как «Self» и «CLS». В реальном программировании всегда придерживайтесь этой конвенции.

class Dog:

    @classmethod
    def walk(myclass):
        print('Dog is Walking')

    # instance method
    def bark(myobject):
        print('Dog is Barking.')

Dog.walk()
d = Dog()
d.bark()

Переменная «Self» связана с текущим экземпляром

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

class Dog:

    def __init__(self, b):
        self.breed = b

    def bark(self):
        print(f'{self.breed} is Barking.')


d1 = Dog('Labrador')
d2 = Dog('Husky')

d1.bark()
d2.bark()

Выход:

Labrador is Barking.
Husky is Barking.

Почему бы не сделать «я» переменную неявную?

Было много предложений, чтобы сделать «самостоятельно» переменную зарезервированное ключевое слово и неявно доступна для метода экземпляра. Но предложение было отклонено «Гвидо Ван Россомом». Вы можете прочитать о них здесь и здесь Отказ