Урок #13 = Пройден У меня есть понимание что это нужно знать, но честно говоря, когда слишком много магических методов, и тем более, если они практически не будут применяться, начинаю зевать, как будто на скучной лекции. Надеюсь хоть какой-то из них пригодится )
В конце ролика "#4 Метод __new__. Пример паттерна Singleton" было сказано об методе __call__. Я несколько раз пересмотрел текущий ролик #12, и я так и не понял, как можно применить метод __call__ к паттерну Singleton так, чтобы при создании очередного объекта типа Singleton его свойства оставались прежними.
Я обычно использую __str__ и __repr__, чтобы менять отображение информации об объектах при дебаге. Ещё у меня бывало такое, что объекты отображались красным и не выводилась информация, это происходит из-за ошибки в методах, и в консоли такая ошибка не отображается
@@astivard это не фишка, а пробел в знаниях, который режет слух образованным личностям. Странно почему он не "сат" (через эс) говорит)) Кстати, name, произносит верно)
@@nicholasspezza9449 В английском a произносится открыто, максимально похоже на русскую а. Почему все должно произносить слова только на "американский " манер. Это не резка слуха образованных личностей. Это обычное ханжество.
Раньше боялся этих методов, поэтому даже не пытался понять что это. Ничего не поменялось. Это всё конечно интересно, но без понимания где и как это можно применить на практике, оно остаётся непонятным, потому что кажется ненужным. По сути всё это сводится к тому, что обращаться сразу к имени экземпляра класса, вместо того чтобы дописать имя метода, и получить тот же результат. Интересно, но пока точно не пригодится, потому что кажется избыточным. Вместо того чтобы прописывать __len__, return и всё до кучи, можно просто сделать так print(len(p.coords)) - будет длина того же самого списка. Результат точно такой же. К чему лишние строки кода, лишний метод? Про модули я ничего не понял, потому что я тупой и понятия не имею, что такое модули, но Вместо __str__ можно сразу обращаться к нужному атрибуту. Здесь я ещё могу как-то дофантазировать, что видимо вся суть в том, что мы можем не знать имя нужного атрибута, но прописав __str__ мы получим какую-то информацию, например, чтобы другой человек сразу получил какое-то представление о чём либо. Но всё равно это сложно представить, когда есть другие варианты. Например print() в самом методе. Видимо всё дело в универсальности, чтобы не зная имён атрибутов и методов в любом случае что-то выводить при обращении к экземпляру класса Я учу пайтон и понимаю - не зря я столько времени не лез в эти перечисленные методы.
Можете пожалуйста объяснить про функцию str. Здесь ее применяют к классу str(Cat) и она показывает имя класса и ячейку в памяти. Но также если сделать str(123) то она уже превратит в строку число. Это одна и та же функция? Почему она делает разные вещи?
А почему print(len(p)) Не работает по умолчанию для экземпляров класса? class Point: def __init__(self, *args): self.coords = args def show_len(self): return len(self.coords) p = Point(1, 2) print(p.show_len()) Вот например так лен работать будет, а почему print(len(p)) так нет? А если скажем если нам нужно считать len 10ти свойств класса, нам нужно будет дикое дерево if else в магическом методе __len__ делать? if self.__coords_1: return self.__coords_1 ... elif self.__coords_99: return self.__coords_99
Я правильно понимаю, что к примеру метод str или len, которые мы можем применить к экземпляру класса и к объекту другого типа относятся к теме полиморфизма и я являются полиморфными? интерфейс по факту один но работает по разному?!
здесь функциями str и len вызываются магические методы __str__ и __len__ соответствующих объектов (самых разных) и это можно, на мой взгляд, считать полиморфизмом
Почему в методе __str__ используется f-строка вместо простого return self.name? Получается f-строка преобразует полученное значение в тип str без вызова метода __str__?
У меня такое ощущение, что это не магические методы, а обычные функции. Вот я не могу понять, зачем нужен этот магический метод, если надо описывать его функционал? И что в нем магического, если он не работает без написания в классе. Например, если бы я вместо функции __len__ написал бы такую функцию: def length(self): return len(self.__coords) print(length(p)) В том, что есть специальная функция и ту что мы описали разницы нет, функционал одниаковый. Или я не прав? спасибо)
а как метод __call__, например, замените или метод __iter__ и так далее, не все так легко подменяются, да и функцию len другой заменять тоже не очень, т.к. это некий стандарт в Python
То есть для магического метода __ str__ есть соответствующая функция str, для магического метода __len__ имеется функция len, для __abs__ существует abs. НО! Для магического метода __repr__ не существует соответствующей функции? Как-то несправедливо получается ;)
Неужели кто-то нормально объяснил магические методы. Спасибо огромное)
Сергей вы просто шикарен, лучший педагог, из всех кого я встречал. Спасибо огромное!
Столько уроков уже прошло хоть бы позапоминать все эти методы).Спасибо за ваш труд отличный урок!
Наконецто тема, от которой не взрывается мозг)
тоже нравится кит кат?
Со временем всё будет понятно.Решайте практические задачи и изучайте пайтон)!
Как всегда Большущее спасибо Сергей!
Этот ролик был очень понятен, видимо простая тема, а некоторые в голову не хотят заходить.
я сижу как обезяна питаюсь понять
в видео присутствует ОГОВОРКА:
def f(*args):
pass
тип объекта args - tuple, то есть кортеж, но никак НЕ СПИСОК.
курс отличный, спасибо большое
да, верно, есть такое )
Мир питона стал чуточку понятнее)) Спасибо)!
Потрясающий урок
Отлично рассказано! Спасибо!
Спасибо, вы гуру)
Material is very good! It's the second video, where you cal it `underscoPe`. It has nothing to do with scope. It is `underscoRe`.
да, спасибо, что то заклинило ))
слушай ну надо отдать тебе должное, егоровчанелл хуже это обьяснил за первые два маджик метода)))
ты лучший дядя)))
Урок #13 = Пройден
У меня есть понимание что это нужно знать, но честно говоря, когда слишком много магических методов, и тем более, если они практически не будут применяться, начинаю зевать, как будто на скучной лекции.
Надеюсь хоть какой-то из них пригодится )
Хорошее занятие ну когда уже я дойду до наследования😁
Спасибо. Все просто.
В конце ролика "#4 Метод __new__. Пример паттерна Singleton" было сказано об методе __call__. Я несколько раз пересмотрел текущий ролик #12, и я так и не понял, как можно применить метод __call__ к паттерну Singleton так, чтобы при создании очередного объекта типа Singleton его свойства оставались прежними.
большинство тем по пайтону нормально усваиваю, но с этими методами пока трудно очень. Но автору в любом случае спасибо
Серёга красава
so undestandable, amazing)
Хотелось бы видеть плейлист по пандасу
Спасибо. Всё ясно и понятно.
Я бы в качестве модуля взял длину радиус вектора, она часто полезнее бывает)😄
Вроде менее сложно чем предыдущий урок... Теперь бы не забыть это, что бы в нужной ситуации применить..
что бы не забывалось (ну или на по-дольше сохранилось в памяти 😁) нужна практика - пару-тройку раз написать всё это ручками🤪
Я обычно использую __str__ и __repr__, чтобы менять отображение информации об объектах при дебаге. Ещё у меня бывало такое, что объекты отображались красным и не выводилась информация, это происходит из-за ошибки в методах, и в консоли такая ошибка не отображается
underscore :-)
Интересное интерпретирование __str__ для пользователей, __rerp__ для разработчиков, то есть человек пишущий код это пользователь)
в момент разработки и отладки - разработчик, а когда его плодами пользуются другие (или он сам), то пользователь
Круто, спасибо!
Еще можно так писать repr(cat) - выведет строку
Сергей здравствуйте.Вы не планируете сделать уроки по блокчейну и смартконтрактам на python? Было бы замечательно,даже если он будет платным..
пока нет
Класс кАт
Это фишка автора ))
@@astivard это не фишка, а пробел в знаниях, который режет слух образованным личностям. Странно почему он не "сат" (через эс) говорит)) Кстати, name, произносит верно)
@@nicholasspezza9449 В английском a произносится открыто, максимально похоже на русскую а. Почему все должно произносить слова только на "американский " манер. Это не резка слуха образованных личностей. Это обычное ханжество.
Раньше боялся этих методов, поэтому даже не пытался понять что это. Ничего не поменялось. Это всё конечно интересно, но без понимания где и как это можно применить на практике, оно остаётся непонятным, потому что кажется ненужным.
По сути всё это сводится к тому, что обращаться сразу к имени экземпляра класса, вместо того чтобы дописать имя метода, и получить тот же результат.
Интересно, но пока точно не пригодится, потому что кажется избыточным.
Вместо того чтобы прописывать __len__, return и всё до кучи, можно просто сделать так
print(len(p.coords)) - будет длина того же самого списка. Результат точно такой же. К чему лишние строки кода, лишний метод?
Про модули я ничего не понял, потому что я тупой и понятия не имею, что такое модули, но
Вместо __str__ можно сразу обращаться к нужному атрибуту. Здесь я ещё могу как-то дофантазировать, что видимо вся суть в том, что мы можем не знать имя нужного атрибута, но прописав __str__ мы получим какую-то информацию, например, чтобы другой человек сразу получил какое-то представление о чём либо. Но всё равно это сложно представить, когда есть другие варианты. Например print() в самом методе.
Видимо всё дело в универсальности, чтобы не зная имён атрибутов и методов в любом случае что-то выводить при обращении к экземпляру класса
Я учу пайтон и понимаю - не зря я столько времени не лез в эти перечисленные методы.
👍
Можете пожалуйста объяснить про функцию str. Здесь ее применяют к классу str(Cat) и она показывает имя класса и ячейку в памяти.
Но также если сделать str(123) то она уже превратит в строку число. Это одна и та же функция? Почему она делает разные вещи?
А почему print(len(p)) Не работает по умолчанию для экземпляров класса?
class Point:
def __init__(self, *args):
self.coords = args
def show_len(self):
return len(self.coords)
p = Point(1, 2)
print(p.show_len())
Вот например так лен работать будет, а почему print(len(p)) так нет?
А если скажем если нам нужно считать len 10ти свойств класса, нам нужно будет дикое дерево if else в магическом методе __len__ делать?
if self.__coords_1:
return self.__coords_1
...
elif self.__coords_99:
return self.__coords_99
Говоришь, что считаешь len 10-ти свойств, но при этом просто выводишь координаты(__coord_n) экземпляра класса. Причем абсолютно несуразным способом
Я правильно понимаю, что к примеру метод str или len, которые мы можем применить к экземпляру класса и к объекту другого типа относятся к теме полиморфизма и я являются полиморфными? интерфейс по факту один но работает по разному?!
здесь функциями str и len вызываются магические методы __str__ и __len__ соответствующих объектов (самых разных) и это можно, на мой взгляд, считать полиморфизмом
Почему в методе __str__ используется f-строка вместо простого return self.name? Получается f-строка преобразует полученное значение в тип str без вызова метода __str__?
метод __str__ возвращает строку, которая получается при применении функции str() к объекту класса
Правильно ли я понял, что repr и str без переопределения работают одинаково?
да
@@selfedu_rus спасибо!
о май Сааааааааааt
А чего не сад?)
кто мне может обяснить self.__coords=ars. это прижатный атрибыт, а что значит =args?
undrescoRe = __, underscoPe = недооценивать,
есть такое ))
прошу прощения: underscoRe
У меня такое ощущение, что это не магические методы, а обычные функции.
Вот я не могу понять, зачем нужен этот магический метод, если надо описывать его функционал? И что в нем магического, если он не работает без написания в классе.
Например, если бы я вместо функции __len__ написал бы такую функцию:
def length(self):
return len(self.__coords)
print(length(p))
В том, что есть специальная функция и ту что мы описали разницы нет, функционал одниаковый.
Или я не прав?
спасибо)
а как метод __call__, например, замените или метод __iter__ и так далее, не все так легко подменяются, да и функцию len другой заменять тоже не очень, т.к. это некий стандарт в Python
То есть для магического метода __ str__ есть соответствующая функция str, для магического метода __len__ имеется функция len, для __abs__ существует abs. НО! Для магического метода __repr__ не существует соответствующей функции? Как-то несправедливо получается ;)
repr используется самим интерпретатором Python и вызывает его в отладочных (служебных) целях
В чем прикол __len__ и __abs__. Всё это с такой же лёгкостью можно сделать обычным методом
удобство и унификация кода на более общем уровне
Та не "Кат", а "Кэт".