Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/120: Рейтинг темы: голосов - 120, средняя оценка - 4.64
 Аватар для Alycia
0 / 0 / 0
Регистрация: 28.12.2018
Сообщений: 35

Объясните значение метода _init_ и параметр self

07.01.2019, 15:40. Показов 22887. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
в книге как-то размыто описывается, а в инете я четкого ответа не нашла. Заранее спасибо
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.01.2019, 15:40
Ответы с готовыми решениями:

Что означает первый параметр метода этого класса? И почему при вызове метода передаётся один параметр(второй)?
public static HelpPageApiModel GetHelpPageApiModel(this HttpConfiguration config, string apiDescriptionId)

Объясните понятие "параметр" функции/метода
Добрый вечер. Возможно вопрос глупый, но пожалуйста, дайте простой ответ для полного понимания для чего конкретно нужны параметры...

Объясните значение метода SetFIO
Здравствуйте. Разбираясь с классами меня заинтересовал метод. Подскажите пожалуйста что делает этот метод class cSotr // сам класс {...

24
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
13.02.2020, 05:18
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от kot_boyun Посмотреть сообщение
где-нибудь найдет коса на камень?)
Найдёт Был бы это с++ или ява, то это можно было бы принять за статические поля. Но увы…

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Koza:
    horns = 2
     
# Создаем экземпляр
koza1 = Koza()  
koza2 = Koza()            
print(koza1.horns)  # 2
print(koza2.horns)  # 2
koza1.horns -= 1
print(koza1.horns)  # 1
print(koza2.horns)  # 2
 
Koza.horns = 0  # вывели новую породу коз
print(koza1.horns)  # 1
print(koza2.horns)  # 0 oops!
 
koza3 = Koza()  # новые козы будут рождаться без рогов 
print(koza3.horns)  # 0
Внимание на 15-ю строчку.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
13.02.2020, 09:32
Цитата Сообщение от kot_boyun Посмотреть сообщение
Но можно же задавать и не через __init__, к примеру так?
У Вас задаются атрибуты класса, а не экземпляра. По Вашему получается, что все козы изначально имеют имя 'Маруся', и только потом это имя можно изменить на другое. Почитайте разницу между атрибутами экземпляра и атрибутами класса.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Koza():
    kopita = 4
    roga = 2
    sherst = True
    glaza = 2
    name = 'Маруся'
    
    def daetMoloka(self, time):
        return (time*2)
     
# Создаем экземпляр
koza1 = Koza()            
# Свойства класса
print('Рога:', koza1.roga)
print('Имя:', koza1.name)
print('Молоко в N часов (2/час):',koza1.daetMoloka(4))
 
print('Имя любой козы:', Koza.name)
Когда же Вы используете метод __init__, Вы для каждого экземпляра с помощью параметров задаете его индивидуальные значения , у общих для всех экземпляров класса атрибутов (свойств). Нужно различать общие для всех экземпляров класса атрибуты (свойства) и их значения. Значения атрибутов у всех экземпляров класса могут быть одинаковые (и тогда они в __init__ указываются как значения параметров по умолчанию), но у конкретного экземпляра значение может отличаться от общего. Например у конкретной козы один рог, второй сломан, но атрибут рога, всегда присутствует.
С помощью атрибутов класса, Вы изначально не можете присвоить индивидуальные значения экземпляру, только путем их изменения уже после создания экземпляра. __init__ же задает индивидуальные значения экземпляру уже при его создании. В этом разница между атрибутами задаваемыми с помощью __init__ и атрибутами экземпляра создаваемыми с помощью атрибутов класса.
0
0 / 0 / 1
Регистрация: 19.09.2016
Сообщений: 11
13.02.2020, 15:19
Viktorrus, Уловил суть, спасибо!
Подскажите, а что в такой конструкции делает super()?
Python
1
2
def __init__(self):
        super().__init__()
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
13.02.2020, 19:03
Цитата Сообщение от kot_boyun Посмотреть сообщение
Подскажите, а что в такой конструкции делает super()?
super обозначает родительский класс, когда наш класс является его подклассом и метод __init__ наследуется не в точности, а с некоторыми изменениями. То есть мы наследуем этот метод от суперкласса, но при этом вносим в него некоторые изменения.
Ваш пример бессмыслен, так как он наследует метод от супер класса, но ничего не меняет. В таком случае в подклассе вообще не нужен метод __init__, так как он в этом случае будет наследоваться от суперкласса без изменения. Сейчас найду у Лутца пример наследования метода __init__ с изменением в подклассе.

Добавлено через 23 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Person():
    def __init__(self, name, job=None, pay=0):
        self.name = name
        self.job = job
        self.pay = pay
    def lastName(self):
        return self.name.split()[-1]
    def giveRaise(self, percent):
        self.pay = int(self.pay * (1 + percent))
    def __str__(self):
        return '[Person: %s, %s}' % (self.name, self.pay)
 
class Manager(Person):
    def __init__(self, name, pay):
        Person.__init__(self, name, 'mgr', pay)
 
    def giveRaise(self, percent, bonus=.10):
        Person.giveRaise(self, percent + bonus)
Лутц М. Изучаем Python (4-е издание, 2011) стр.745-746
Лутц использует явное имя суперкласса, я предпочитаю делать так же. Однако редактор для написания питоновского кода на автомате пытается подсунуть конструкцию с super(). Я понимаю, что это такое, но я его не использую, а делаю как у Лутца. Указываю имя суперкласса явно.

Добавлено через 8 минут
В принципе, здесь можно говорить о наследовании условно. На самом деле в данном случае метод не наследуется а вызывается из суперкласса методом подкласса и вносится корректировка.

Добавлено через 2 минуты
Если что то осталось не понятно, то почитайте указанные страницы у Лутца, он там подробно (и объемно) все это объясняет.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
22.12.2021, 23:31
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Найдёт Был бы это с++ или ява, то это можно было бы принять за статические поля. Но увы
А Вы сделаете поле списком(мутабельным типом) и попробуйте еще раз добавляя/удаляя из него элементы.

Добавлено через 5 минут
Цитата Сообщение от kot_boyun Посмотреть сообщение
Viktorrus, Но можно же задавать и не через __init__, к примеру так?
Для этого есть dataclasses
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.12.2021, 23:31
Помогаю со студенческими работами здесь

Создание метода класса Init
Здравствуйте! Помогите, пожалуйста, разобрать, почему компилятор может выдавать такую ошибку: Project Project1.exe raised exception...

при формировании отчёта в режиме 1 с выявляется ошибка метода контекста.Недопустимое значение параметра (параметр №1)
Здраствуйте я новенький в среде 1 с поэтому могу задавать глупые вопросы.При программировании в модуле был написан код доступа к отчёту ...

Передача метода в метод, метода как параметр
Здравствуйте друзья. Есть значит некоторый фрейм: public class Window extends JFrame implements ActionListener { ... (1) ......

Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода
Нарисуйте блок-схему реализации метода Queue::Get. Объясните работу метода. Ребя может кто помочь

Ошибка при загрузке Ubuntu 14.04 LTS: run-init: /sbin/init: Permission denied
Здравствуйте! На компьютере установлена Uuntu 14.04 LTS (64 bit). После установки cups (для соединения с принтером) система перестала...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
25
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru