self
self — это стандартное имя первого аргумента для методов объекта.
На заметку
Ничто не мешает изменить это имя и использовать любое другое, однако пренебрежение этим устоявшимся соглашением может ввести в заблуждение читателей вашего кода.
В противоположность некоторым другим языкам, в которых объект (экземпляр класса) доступен в методах под специальным именем (например, this ) и не числится среди аргументов метода, в Питоне он обозначен явно.
В ходе исполнения метода объекта в первом аргументе автоматически окажется экземпляр класса (передевать его специально не требуется).
class MyClass:
def say(self):
print(self)
my_1 = MyClass() # Создаём объект класса.
my_1.say() #
Можно вызвать метод и в качестве несвязанного метода (метода класса), однако в этом случае передать объект придётся самостоятельно.
MyClass.say(my_1) #
Если передать в несвязанный [с объектом] метод класса объект, тип которого не совпадает с типом класса, в котором определён метод, поведение в Python 3 отличается от Python 2. Смотрите пример ниже.
MyClass.say('нечто')
# Python 3: нечто
# Python 2: TypeError: unbound method say() must be called with MyClass instance as first argument (got str instance instead)
Что такое self в питоне
![]()
Ключевое слово self в Python: обращение к атрибутам класса
19 марта 2023
Оценки статьи
Еще никто не оценил статью
В Python ключевое слово self используется в методах класса для обращения к атрибутам и методам этого же класса. Это позволяет определить методы, которые могут работать со свойствами и методами класса, и вызывать их внутри метода, без явного указания объекта, который вызывает метод.
Ключевое слово self
Ключевое слово self является соглашением для обозначения экземпляра класса в методах класса, и используется для передачи ссылки на текущий экземпляр в методы класса. Само слово self может быть заменено на любое другое название, однако соглашение заключается в использовании именно этого слова.
В методах класса self должен быть первым параметром в списке параметров метода. При вызове метода класса, self передается автоматически, и не требуется явного указания этого параметра.
Пример использования self:
class Car: def __init__(self, brand, model): self.brand = brand self.model = model def display_info(self): print(f"Brand: self.brand>, Model: self.model>") car = Car("Toyota", "Corolla") car.display_info()
В данном примере, мы создаем класс Car , и определяем метод display_info , который выводит на экран марку и модель автомобиля. В методе display_info , мы используем self.brand и self.model для обращения к атрибутам объекта класса Car .
Использование self в методах класса
Методы класса могут использовать self для обращения к атрибутам и другим методам этого же класса. Это позволяет создавать более сложные методы, которые могут работать со свойствами и методами класса, и вызывать их внутри метода, без явного указания объекта, который вызывает метод.
class Rectangle: def __init__(self, width, height): self.width = width self.height = height def area(self): return self.width * self.height def perimeter(self): return 2 * (self.width + self.height) def display_info(self): print(f"Width: self.width>, Height: self.height>, Area: self.area()>, Perimeter: self.perimeter()>") rect = Rectangle(5, 10) rect.display_info()
В данном примере, мы создаем класс Rectangle , и определяем методы area и perimeter , которые вычисляют площадь и периметр прямоугольника. Мы также определяем метод display_info , который выводит на экран ширину, высоту, площадь и периметр прямоугольника, используя ключевое слово self .
Заключение по ключевому слову self
Итак, мы рассмотрели основные принципы работы с self в Python. Напомним, что self — это соглашение об именовании, которое используется для обозначения первого параметра метода класса. Этот параметр представляет собой ссылку на экземпляр класса, с которым работает метод.
Ниже приведены основные выводы, которые можно сделать о работе с self в Python:
- Ключевое слово self используется для ссылки на экземпляр класса внутри методов класса.
- self всегда должен быть первым параметром метода класса.
- Имя self не является зарезервированным словом, но это соглашение об именовании.
- При создании экземпляра класса не нужно передавать self в качестве параметра, Python делает это автоматически.
- self используется для доступа к атрибутам и методам экземпляра класса.
- Методы класса могут вызывать другие методы этого же класса, используя self .
- self может использоваться внутри методов для передачи ссылки на экземпляр класса другим методам или функциям.
Надеемся, что данная статья помогла вам понять, как использовать self в Python. Самостоятельное изучение этого соглашения об именовании позволит вам более глубоко понять принципы работы классов и методов в Python, что в свою очередь поможет вам писать более эффективный и читаемый код.
Параметр self#
Параметр self указывался выше в определении методов, а также при использовании переменных экземпляра в методе. Параметр self это ссылка на конкретный экземпляр класса. При этом, само имя self не является особенным, а лишь договоренностью. Вместо self можно использовать другое имя, но так делать не стоит.
Пример с использованием другого имени, вместо self:
In [15]: class Switch: . : def info(sw_object): . : print(f'Hostname: sw_object.hostname>\nModel: sw_object.model>') . :
Работать все будет аналогично:
In [16]: sw1 = Switch() In [17]: sw1.hostname = 'sw1' In [18]: sw1.model = 'Cisco 3850' In [19]: sw1.info() Hostname: sw1 Model: Cisco 3850
Хотя технически использовать другое имя можно, всегда используйте self.
Во всех «обычных» методах класса первым параметром всегда будет self. Кроме того, создание переменной экземпляра внутри класса также выполняется через self.
Пример класса Switch с новым методом generate_interfaces: метод generate_interfaces должен сгенерировать список с интерфейсами на основании указанного типа и количества и создать переменную в экземпляре класса. Для начала, вариант создания обычно переменной внутри метода:
In [5]: class Switch: . : def generate_interfaces(self, intf_type, number_of_intf): . : interfaces = [f"intf_type>number>" for number in range(1, number_of_intf + 1)] . :
В этом случае, в экземплярах класса не будет переменной interfaces:
In [6]: sw1 = Switch() In [7]: sw1.generate_interfaces('Fa', 10) In [8]: sw1.interfaces --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) ipython-input-8-e6b457e4e23e> in module>() ----> 1 sw1.interfaces AttributeError: 'Switch' object has no attribute 'interfaces'
Этой переменной нет, потому что она существует только внутри метода, а область видимости у метода такая же, как и у функции. Даже другие методы одного и того же класса, не видят переменные в других методах.
Чтобы список с интерфейсами был доступен как переменная в экземплярах, надо присвоить значение в self.interfaces:
In [9]: class Switch: . : def info(self): . : print(f"Hostname: self.hostname>\nModel: self.model>") . : . : def generate_interfaces(self, intf_type, number_of_intf): . : interfaces = [f"intf_type>number>" for number in range(1, number_of_intf+1)] . : self.interfaces = interfaces . :
Теперь, после вызова метода generate_interfaces, в экземпляре создается переменная interfaces:
In [10]: sw1 = Switch() In [11]: sw1.generate_interfaces('Fa', 10) In [12]: sw1.interfaces Out[12]: ['Fa1', 'Fa2', 'Fa3', 'Fa4', 'Fa5', 'Fa6', 'Fa7', 'Fa8', 'Fa9', 'Fa10']
Класс self в Python
В этом уроке мы изучим использование self в Python. Это часто становится предметом споров среди экспертов и проблемой для новичков.
Python – это не язык, который создавался для парадигмы объектно-ориентированного программирования. Таким образом, создание статического метода в Python не является прямым. Посмотрим, как это делается:
class Person: def static_method(): print("This is a static method")
Теперь, чтобы создать метод, который может работать с реальным объектом «Person», нам нужно предоставить ему ссылку на этот объект. Итак, вместо передачи полного объекта Person в его собственный класс мы можем использовать self как:
class Person: def object_method(self): print("I can do something with self.")

Затем давайте посмотрим, как его можно использовать для доступа к полям в самом конструкторе класса.
Самостоятельный конструктор
self также может использоваться для ссылки на поле переменной в классе:
class Person: # name made in constructor def __init__(self, n): self.name = n def get_person_name(self): return self.name
В приведенном выше фрагменте self относится к переменной имени всего класса Person. Обратите внимание: если у нас есть переменная в методе, self не будет работать. Эта переменная просто существует только во время выполнения этого метода и, следовательно, является локальной для этого метода. Для определения глобальных полей (переменных полного класса) нам нужно определить их ВНЕ методов класса. Обратитесь к области переменной python.

self – ключевое слово?
self используется во многих местах в Python, поэтому люди думают, что это ключевое слово. Но в отличие от C ++ self не является ключевым словом.
Фактически мы можем использовать любое имя для первого параметра метода, но настоятельно рекомендуется придерживаться соглашения о его вызове самостоятельно.
Это означает, что последний класс можно сделать как:
class Person: #name made in constructor def __init__(another, n): another.name = n; def get_person_name(another): return another.name
Должны ли мы передать self методу?
Приведенное выше объяснение открывает новый вопрос, должны ли мы просто передать self методу? Давайте рассмотрим класс Person, который содержит метод, определенный как:
def something(another, arg1, arg2): pass
Если personMe является экземпляром класса и вызывается personMe.something (arg1, arg2), python внутренне преобразует его для нас как:
Person.something(personMe, arg1, arg2)
Переменная self относится к самому объекту.
Это все для self и его использования в конструкторе и функциях для получения текущей ссылки на объект.