Как стать автором
Обновить

Комментарии 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 всё есть объект. И класс - это объект, и экземпляр - это объект.
Фраза "объект класса" указывает на "питонячью" реализацию сущности класса. Но никак не его экземпляра (инстанса).

Да это общая оговорка для ООП в принципе. А берётся она вот откуда:


  1. Во-первых, слово "экземпляр" язык сломаешь произносить, да и забыть его легко, а "инстанс" глупая калька которую произносить стыдно. Произнести же или написать "объект класса" можно вообще не задумываясь.


  2. Во-вторых, "объект класса" — это "объект, имеющий какое-то отношение к классу". А отношение между объектами и классами в ООП есть ровно одно, если оставаться в рамках стандартного ООП без динамических "расширений". Так что "объект класса", хоть и не является термином, всё ещё синоним "экземпляру".



Фраза "объект класса" указывает на "питонячью" реализацию сущности класса.

А вот и нет, "питонячья" реализация сущности класса (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». Как вы его переводить на русский язык будете?
объект класса
То есть вы считаете нормальным переводить «an object of a class» и «class object» одинаково, хотя они означают совсем разные вещи, но неправ я? Отлично.


Если вы согласны с тем, что class object — это объект, который является классом, тогда объясните мне, каким таким образом словосочетание «объект класса» в русском языке может означать «объект, который является классом».

Какие такие грамматические правила заставили слово «класс» оказаться в родительном падеже.

которые экземпляр (instance) класса называют объектом класса. Скажите, почему? В каких книгах так пишут?

Это калька с английского an object of a class. Теоретики иногда ещё говорят an element of a class. В большинстве случаев an instance of a class означает то же самое. В чисто практическом смысле, всегда найдутся более важные задачи, чем искать разницу между ними https://stackoverflow.com/q/2885385.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации