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

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

07.01.2019, 15:40. Показов 23106. Ответов 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
8489 / 6156 / 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
Ответ Создать тему
Новые блоги и статьи
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
Свет внутри себя
kumehtar 07.06.2026
Пусть это будет здесь lIs4oanZS9Y
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу. До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru