Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 2, 2017 17:47:20

jerry99
Зарегистрирован: 2017-11-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование (тонкости)

Мучает вопрос:
Итак, когда применяется метод к экземпляру, этот метод и есть метод экземпляра или же это метод класса который запускается при его выполнении? (возможно плохо объяснил, буду разъяснять)

 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)
Mark Lutz “Изучаем Python”

Если мы вызовем метод экземпляра, то будет выполнен МЕТОД ЭКЗЕМПЛЯРА или же будет выполнен МЕТОД КЛАССА С ССЫЛКОЙ НА ЭКЗЕМПЛЯР? (не сочтите за крик)

 g.giveRaise(10)

Вот здесь вот: Мы сейчас использовали метод экземпляра что был унаследован у класса или же использовали всего лишь оптимизированную и более удобную форму вызова метода класса передачей экземпляра?

То есть! Когда мы вводим
 g.giveRaise(10)
Интерпретатор автоматически переводит это выражение в

Person.giveRaise(g, 10)
Или же он заранее (в момент создания экземпляра) наследует все методы класса (замещая везде аргумент self на себя) и уже использует их как своих родных? # просто я не уверен, что компилятор может транслировать код на столько оптимизировано

Я понимаю, что если заглянуть в атрибуты объекта экземпляра, то можно найти там его собственные методы, которые были унаследованы у класса, но всё равно мне мне очень надо узнать как работает транслятор. (ведь питон иногда врёт)
 print(dir(g))

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

Отредактировано jerry99 (Ноя. 2, 2017 17:57:55)

Офлайн

#2 Ноя. 2, 2017 17:54:20

jerry99
Зарегистрирован: 2017-11-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование (тонкости)

Возможно вам покажется это чушью, так как виден прямой вызов атрибута объекта экземпляра и можно понять что он вызывает свой атрибут, а не атрибут объекта класса, но кто знает какие тайны хранит в себе ООП

P.S Вспомнил почему у меня появился туман в голове, что возбудил меня задать этот вопрос:

Как известно поиск методов введётся в дереве наследования - И введется ли он в момент создания экземпляра или же в момент вызова метода экземпляра?

Отредактировано jerry99 (Ноя. 2, 2017 18:05:32)

Офлайн

#3 Ноя. 2, 2017 18:01:36

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Наследование (тонкости)

jerry99
Дорогой друг, чушь - это когда человек знает некоторые особенности обсуждаемого вопроса, но делает нелогичные в целом предположения. Ваше словоблудие, это не чушь, это шизофазия - вы соединяете между собой слова, которые в совокупности составляют похожее на грамматически верное, но не имеющее смысла предложение. Не надо вам ничего комментировать, хорошо?



Отредактировано FishHook (Ноя. 2, 2017 18:03:11)

Офлайн

#4 Ноя. 2, 2017 18:17:50

jerry99
Зарегистрирован: 2017-11-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование (тонкости)

FishHook
Я конечно извиняюсь, но я как видите новичок в вашем языке, и как любой новичок имею очень много вопросов. Мне очень интересно где я допустил нелогическую дыру? Или же вы как говорится в народе “простой балабол”?

Сейчас я наблюдал ещё одно странное поведение языка:

Я понял, что экземпляры класса проводят поиск по дереву в момент вызова метода экземпляра:

 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 Ron(Person):
    
    def giveRaise(self, percent, hello):
        self.pay = percent+hello
            
g = Ron('alex')
print(dir(g))
del Ron.giveRaise
g.giveRaise(.5) # Второй аргумент недоступен (значит поиск введётся в момент вызова метода экземпляра, а не в момент создания экземпляра)


Отредактировано jerry99 (Ноя. 2, 2017 18:18:55)

Офлайн

#5 Ноя. 2, 2017 18:28:44

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Наследование (тонкости)

jerry99
Или же вы как говорится в народе “простой балабол”?
Нет, я просто модератор этого форума, моя обязанность следить за адекватностью контента.

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



Офлайн

#6 Ноя. 2, 2017 18:49:40

jerry99
Зарегистрирован: 2017-11-02
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Наследование (тонкости)

FishHook

FishHook
Вот как только вы переведете мне смысл фраз
вызов атрибута объекта экземпляра
и
свой атрибут, а не атрибут объекта класса

Я должен вам объяснять что такое объект экземпляра и какие у него бывают атрибуты? Или же вы считаете что я написал самую обыкновенную чушь? Хорошо, читайте:

1. Откройте книгу Марка Лутца “Изучаем Python” 4 издание, русская версия
2. Пролистайте до 726 страницы
3. Загляните в блок с заголовком Ответы
4. Найдите там ответ на 3 вопрос и прочтите его полностью

Атрибуты класса создаются присваиванием атрибутам объекта класса.
Обычно они создаются инструкциями верхнего уровня в инструкции class –
каждое имя, которому будет присвоено значение внутри инструкции class,
становится атрибутом объекта класса (с технической точки зрения область
видимости инструкции class преобразуется в пространство имен атрибутов
объекта класса). Атрибуты класса могут также создаваться через присваи-
вание атрибутам класса в любом месте, где доступна ссылка на объект клас-
са, то есть даже за пределами инструкции class.
атрибутам объекта класса.

Убедились, что фраза атрибут объекта класса является идеологически более верной в сравнение с фразой атрибут класса?

Далее
1. Тот же блок ответов, найдите там ответ на 4 вопрос
2. Прочтите его

4. Атрибуты экземпляра создаются присваиванием атрибутам объекта эк-
земпляра. Обычно они создаются внутри методов класса, в инструкции
class – присваиванием значений атрибутам аргумента self (который всегда
является подразумеваемым экземпляром). Повторюсь: возможно создавать
атрибуты с помощью операции присваивания в любом месте программы,
где доступна ссылка на экземпляр, даже за пределами инструкции class.
Закрепление пройденного 727
Обычно все атрибуты экземпляров инициализируются в конструкторе __
init__ – благодаря этому при последующих вызовах методов можно быть
уверенным в существовании необходимых атрибутов.

атрибутам объекта эк-
земпляра


FishHook
я просто модератор этого форума
Очень интересно кто поставил модератором человека не знающего банальных терминов языка.

FishHook
поэтому вам надо молчать и слушать, иначе я вас просто удалю отсюда.
Забыл что у вас тут автократия, извиняюсь

Офлайн

#7 Ноя. 2, 2017 18:57:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Наследование (тонкости)

jerry99
Я должен вам объяснять что такое объект экземпляра
Да, именно вы должны это объяснять, потому что вы это выдумали
jerry99
Или же вы считаете что я написал самую обыкновенную чушь?
Разумеется

атрибутам объекта класса.
атрибутам объекта экземпляра

Объект - это экземпляр класса. Вы этого не поняли, я вам это декларирую. Не будете спорить?




Офлайн

#8 Ноя. 2, 2017 18:58:25

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Наследование (тонкости)

Очень интересно кто поставил модератором человека не знающего банальных терминов языка

А за это я вас баню.



Отредактировано FishHook (Ноя. 2, 2017 19:01:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version