Комментарии 11
Если мы в метод signature поместим запрос в базу или поход по http
Первое: если ..., то нельзя будет утверждать, что метод чистый, а значит кэширование может повлечь нежелательные последствия.
Второе: если ..., то свойство (проперти) будет работать неожиданно медленно. Поскольку свойство должно быть максимально легким, если оно все таки используется (представьте себе это проперти, которое будет стучатся условную секунду в базу данных). Иначе говоря, при частом использовании могут возникнуть просадки производительности (если свойство ходит по http, например)
Это тот случай, когда один вопрос на известном сайте лучше всей статьи. Прошу к ознакомлению: https://stackoverflow.com/questions/68593165/what-is-the-difference-between-cached-property-in-django-vs-pythons-functools
В питоне есть давняя традиция: проталкивать свежесочиненный код в стандартную библиотеку, а потом всем сообществом годами страдать и исправлять в нем баги.
Про @functools.cached_property есть отдельная дискуссия: https://discuss.python.org/t/finding-a-path-forward-for-functools-cached-property/23757/41. tldr; уже ни кто не сомневается, что лок на классе это баг. Но как починить - коллективый разум пока не придумал.
from functools import cache
from time import time
class User:
@property
@cache
def signature(self) -> bytes:
time.sleep(1)
return b'signed'
Потокобезопасно и нет необходимости копировать код или писать свой велосипед.
И чтоб 2 раза не вставать, вопрос не по теме.
Уже не в первый раз встречаю людей, которые экземпляр (instance) класса называют объектом класса. Скажите, почему? В каких книгах так пишут?
В python всё есть объект. И класс - это объект, и экземпляр - это объект.
Фраза "объект класса" указывает на "питонячью" реализацию сущности класса. Но никак не его экземпляра (инстанса).
Да это общая оговорка для ООП в принципе. А берётся она вот откуда:
Во-первых, слово "экземпляр" язык сломаешь произносить, да и забыть его легко, а "инстанс" глупая калька которую произносить стыдно. Произнести же или написать "объект класса" можно вообще не задумываясь.
Во-вторых, "объект класса" — это "объект, имеющий какое-то отношение к классу". А отношение между объектами и классами в ООП есть ровно одно, если оставаться в рамках стандартного ООП без динамических "расширений". Так что "объект класса", хоть и не является термином, всё ещё синоним "экземпляру".
Фраза "объект класса" указывает на "питонячью" реализацию сущности класса.
А вот и нет, "питонячья" реализация сущности класса (class object) на русский язык правильно переводится как "объект-класс". Это же не объект, который имеет какие-то отношение к классу. а объект который буквально является классом.
Впрочем, произнося "объект-класс" язык сломать ещё проще чем произнося "экземпляр", так что я понимаю тех кто говорит "объект класса" имея в виду "class object".
слово "экземпляр" язык сломаешь произносить
Ваше личное мнение. Я его легко произношу. Мои коллеги тоже проблем не испытывают
да и забыть его легко
Без комментириев
"инстанс" глупая калька которую произносить стыдно
Снова ваше личное мнение. Мне не стыдно.
"объект класса" — это "объект, имеющий какое-то отношение к классу".
"питонячья" реализация сущности класса (class object) на русский язык правильно переводится как "объект-класс"
Был бы вам очень благодарен за ссылки на более или менее уважаемые источники, где такой перевод относительно объектов и классов является общепризнанным.
"питонячья" реализация сущности класса (class object)
я понимаю тех кто говорит "объект класса" имея в виду "class object"
объект класса", хоть и не является термином, всё ещё синоним "экземпляру".
А тут вы сами себе противоречите. В одном предложении у вас "объект класса" - это синоним "экземпляра". В другом под "объект класса" вы понимаете "class object". А "class object" у вас это сам класс.
Был бы вам очень благодарен за ссылки на более или менее уважаемые источники, где такой перевод относительно объектов и классов является общепризнанным.
Языковой логики вам недостаточно?
А тут вы сами себе противоречите.
Никакого противоречия. "Объект класса" — это не термин, а описательный оборот, который может обозначать разные вещи в зависимости от контекста. У неграмотных авторов — ещё и в одном предложении.
Языковой логики вам недостаточно?
Вы утверждаете, что (class object) на русский язык правильно переводится как "объект-класс", при этом ссылаетесь на языковую логику, а не на имеющиеся переводы (любые)? На мой взгляд, это некорректный перевод терминологии. К примеру, reverso фразу "class object" переводит как "объект класса" или "объект Class". Гугл как "объект класса". Ни в какой литературе по python я никогда не встречал определения экземпляра, как "объект класса". Но справедливости ради я предпочитаю англоязычную литературу.
Языковой логики вам недостаточно?
Мне, как человеку, у которого русский - родной, а английский используется ежедневно в работе, данная логика видится некорректной.
Никакого противоречия. "Объект класса" — это не термин, а описательный оборот, который может обозначать разные вещи в зависимости от контекста.
Если мы всё ещё говорим о python, то нет. В python есть такие определения как Class object, Instance object, Method object и т.п.
Вы утверждаете, что (class object) на русский язык правильно переводится как "объект-класс", при этом ссылаетесь на языковую логику, а не на имеющиеся переводы (любые)?
Да, именно так. Потому что имеющиеся переводы — это либо машинные, либо от переводчиков которые смотрели на имеющиеся переводы вместо того чтобы вникать в смысл переводимого текста.
Кстати, там ниже привели словосочетание "an object of a class". Как вы его переводить на русский язык будете?
Мне, как человеку, у которого русский — родной, а английский используется ежедневно в работе, данная логика видится некорректной.
Что некорректного вы видите в утверждении "class object — это объект, который является классом"?
Если мы всё ещё говорим о python, то нет. В python есть такие определения как Class object, Instance object, Method object и т.п.
Ну да, объект-класс, объект-экземпляр, объект-метод. А вы их как называете? Неужели "объект экземпляра" и "объект метода"?
Да, именно так. Потому что имеющиеся переводы — это либо машинные, либо от переводчиков которые смотрели на имеющиеся переводы вместо того чтобы вникать в смысл переводимого текста.
Ясно. Значит интернет не прав. И я не прав. И все с кем довелось работать - тоже не правы. А вы правы. Ок. Но ссылок не будет? Будем пришивать к делу личные ощущения?
Кстати, там ниже привели словосочетание "an object of a class". Как вы его переводить на русский язык будете?
объект класса
Что некорректного вы видите в утверждении "class object — это объект, который является классом"?
некорректного я вижу во фразах:
"объект класса" — это "объект, имеющий какое-то отношение к классу".
"питонячья" реализация сущности класса (class object) на русский язык правильно переводится как "объект-класс"
А вы их как называете? Неужели "объект экземпляра" и "объект метода"?
да, именно так. Но аргумент был не к тому, как я это называю, а к вашему высказыванию
"Объект класса" — это не термин, а описательный оборот,
В документации python "Class object" - это вполне себе термин, однозначно описывающий объект класса. При этом у экземпляра класса есть отдельный термин - Instance object. Нигде в документации python экземпляр класса не называется class object.
То есть вы считаете нормальным переводить «an object of a class» и «class object» одинаково, хотя они означают совсем разные вещи, но неправ я? Отлично.Кстати, там ниже привели словосочетание «an object of a class». Как вы его переводить на русский язык будете?объект класса
Если вы согласны с тем, что class object — это объект, который является классом, тогда объясните мне, каким таким образом словосочетание «объект класса» в русском языке может означать «объект, который является классом».
Какие такие грамматические правила заставили слово «класс» оказаться в родительном падеже.
которые экземпляр (instance) класса называют объектом класса. Скажите, почему? В каких книгах так пишут?
Это калька с английского an object of a class. Теоретики иногда ещё говорят an element of a class. В большинстве случаев an instance of a class означает то же самое. В чисто практическом смысле, всегда найдутся более важные задачи, чем искать разницу между ними https://stackoverflow.com/q/2885385.
Декоратор cached_property