Вопрос по python!? - Общение Python мододелов
  • Чаты 4chT.com в телеграмм
    Наши группы в телеграмм

Вопрос Вопрос по python!?

Регистрация
4 Авг 2013
Сообщения
95
Репутация
0
Спасибо
0
Монет
0


class A:



def __init__(self, x):

self.x = x





def __call__(self, *args, **kwargs):

return self.x(*args, **kwargs).upper()





def freet(name):

return f'Привет, {name}'

freet = A(freet)



print(freet('Кемаль'))

Вопрос , запись freet = A(freet) означает что у класса A будет параметр? как это(код работает(
 
Регистрация
13 Ноя 2013
Сообщения
83
Репутация
0
Спасибо
0
Монет
0
Всё я понял ошибку , там экземпляр просто имеется ввиду
 
Регистрация
2 Янв 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
В этом коде freet указывает на разные объекты, поэтому и непонятно. freet = A(freet) В конструктор класса A передаётся объект-функция freet, запоминается в аттрибуте x, созданный объект сохраняется в переменной freet. print(freet('Кемаль')) Переменная freet указывает на объект класса A, поэтому вызывается метод __call__ этого класса, которому передаются аргументы вызова (в данном случае одна строка). В методе __call__ запомненная в аттрибуте x объект-функция freet вызывается self.x(*args, **kwargs) с передачей параметров вызова (в данном случае одной строки), объект-функция freet возращает строку return f'Привет, {name}' к этой строке применяется метод upper, результат которого возвращается как результат вызова метода __call__, соответственно, он и выводится функцией print.
 
Регистрация
31 Июл 2013
Сообщения
78
Репутация
0
Спасибо
1
Монет
0
инит колл че это за кал
почему в питоне такие неинтуитивные конструкторы
 
Регистрация
22 Июл 2013
Сообщения
88
Репутация
0
Спасибо
0
Монет
0
Надо ООП изучать на Java. Там кристально чистый ООП.
То, что в питоне есть вот такие извращенные штучки - нигде больше нет.

Это означает, что ваш класс А принимает в качестве параметра ФУНКЦИЮ.
Но дальше вы делаете не очень хорошую магию питона - вы подменяете объявленную функцию freet переменной freet, в которой экз А. Такое тоже нигде больше нельзя делать. И хорошо, что нельзя, питон слишком много позволяет.
 
Сверху Снизу