LINUX.ORG.RU

Ответ на: комментарий от Deleted

Все книги по Питону (которые я видел)

Почему бы не прочитать tutorial? Вот тут, например, внятно написано, что такое класс, что такое class object, что такое instance object и как они соотносятся друг с другом. Тьюториал небольшой, много времени не займёт.

i-rinat ★★★★★
()
Ответ на: комментарий от Deleted

Про ООП есть отдельные книжки, и объяснять саму парадигму можно вообще не опираясь на ЯП. ООП в питоне использовать совсем не обязательно, а вот без строк с числами и работы с ними ты далеко не уедешь.

micronekodesu ★★★
()
Ответ на: комментарий от Crocodoom

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

Нет. Эквивалентом «object of class» было бы «class’ object», хотя и выглядит странно. Но уж явно не «class object».

i-rinat ★★★★★
()
Ответ на: комментарий от Crocodoom

Термины «class object» и «object of class» полностью эквивалентны синтаксически, поскольку и там и там это притяжательный падеж

Во-первых в class object падежа нет. Во-вторых, даже если бы и был, 's - это притяжательный падеж «классов объект», а of X - родительный «объект (произошедший от) класса». В общем, садись - двойка.

no-such-file ★★★★★
()
Ответ на: комментарий от Crocodoom

Тем не менее, именно эта термилогия и принята у питонистов.

Питонистов не интересует понимают ли их другие люди?

ya-betmen ★★★★★
()
Ответ на: комментарий от Deleted

Не интересовался, всегда хватало того, как это объяснено в книжках по питону. В конце концов это же концепция, и при этом довольно простая, что там объяснять? В процедурном\функциональном варианте ты пляшешь от того, как именно твои объекты обрабатываются, при этом сами объекты отходят на второй план (ну, с оговорками, потому как мы все равно в итоге пляшем от того, что за объекты у нас есть), в ООП - наоборот - объект является главным, а то как с ними работать зависит уже от этих объектов. Выделил общее от нескольких объектов в отдельный класс и дальше используешь его в качестве базы, внося только необходимые изменения в отдельные объекты - вот тебе наследование. Полиморфизм - реализуешь для каждого объекта определенный метод, результат работы которого зависит от того, что за объекты участвуют. Инкапсуляции в питоне полноценной нет, она на уровне "договоренностей". Что тут еще можно объяснять?! Дальше остается включать голову чтоб придумать как правильнее это реализовать в каждом конкретном случае, и вообще нужно ли оно.

Может если ты хочешь погрузится в ООП тебе надо взять ту же java, которая на это заточена?

micronekodesu ★★★
()
Ответ на: комментарий от no-such-file

+ i-rinat

Я не знаю, как вы можете владеть английским и при этом не понимать, что в нём конструкции «class object» и «object of class» несут одинаковый смысл.

Может вам будет проще на других примерах? Сможете мне объяснить разницу между «the forum rules» и «rules of the forum»? Или между «the background color» и «color of the background»?

Crocodoom ★★★★★
()
Ответ на: комментарий от Deleted

Порекомендуй

Наброшу пожалуй... Мэтт Зандстра - «PHP. Объекты, шаблоны и методики программирования».

no-such-file ★★★★★
()
Ответ на: комментарий от Crocodoom

Может вам будет проще на других примерах? Сможете мне объяснить разницу между «the forum rules» и «rules of the forum»? Или между «the background color» и «color of the background»?

Давай ты мне объяснишь, почему нет разницы между «table of contents» и «the contents table»? А лучше свалишь на англоязычный форум и спросишь там, чем балаболить о вещах, в которых ничего не понимаешь?

anonymous
()
Ответ на: комментарий от Crocodoom

Сможете мне объяснить разницу

Разница такая же как между the real example и example of the real.

no-such-file ★★★★★
()
Ответ на: комментарий от anonymous

Давай ты мне объяснишь, почему нет разницы между «table of contents» и «the contents table»?

Нет ты

А лучше свалишь на англоязычный форум и спросишь там, чем балаболить о вещах, в которых ничего не понимаешь?

На основной и все дополнительные вопросы ТС уже получил ответ, так что флуд на тему тонкостей перевода Python-терминов никому особо не помешает.

Crocodoom ★★★★★
()

Где ты нашел self ?

class Test(object):
    def __call__(jopa):
        pass
Jopich1
()
Ответ на: комментарий от Crocodoom

А лучше свалишь на англоязычный форум и спросишь там, чем балаболить о вещах, в которых ничего не понимаешь?

На основной и все дополнительные вопросы ТС уже получил ответ, так что флуд на тему тонкостей перевода Python-терминов никому особо не помешает.

Так ты потом возвращайся, куда же мы без тебя. Заодно можешь немцев спросить, про Klassenobjekt и Objekt der Klasse.

anonymous
()
Ответ на: комментарий от Crocodoom

Я не знаю, как вы можете владеть английским и при этом не понимать, что в нём конструкции «class object» и «object of class» несут одинаковый смысл.

Они несут разный смысл.

Может вам будет проще на других примерах?

Да, конечно.

Сможете мне объяснить разницу между «the forum rules» и «rules of the forum»?

В «the forum rules» слово «forum» является attributive noun (https://en.wikipedia.org/wiki/Noun_adjunct). Это noun, которое модифицирует другой noun. В «rules of the forum» и «rules», и «forum» являются noun. Не знаю аналогичного свойства в русском языке, поэтому оба выражения переводятся как «правила форума».

Или между «the background color» и «color of the background»?

Тут в «the background color» слово «background» является adjective. Оно описывает характеристику объекта «color». Выражение означает «фоновый цвет». То есть это цвет, и у него есть характеристика — он фоновый. В color of the background" оба «color» и «background» являются noun. Это выражение означает «цвет фона». Тут фон — это некоторый объект, у которого есть цвет.

i-rinat ★★★★★
()
Ответ на: комментарий от Crocodoom

Напомнило, как на каком-то развлекательном агрегаторе комментаторы поправляли переводчика, который перевёл «thine» как «твой». Мол, там нужно было написать «тонкий».

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

В «the forum rules» слово «forum» является attributive noun (https://en.wikipedia.org/wiki/Noun_adjunct). Это noun, которое модифицирует другой noun. В «rules of the forum» и «rules», и «forum» являются noun. Не знаю аналогичного свойства в русском языке, поэтому оба выражения переводятся как «правила форума».

Аналогичное свойство в русском языке — может обычное дополнение? «Форума» является дополнением к подлежащему «правила». Adjunct как раз переводится как «дополнение».

С другой стороны, пример «chicken soup» (из вики) канонично перевести как «куриный суп», несмотря на то, что это noun adjunct. Тогда почему «правила форума», но при этом не «форумные правила»? В общем пока не ясно.

Тут в «the background color» слово «background» является adjective. Оно описывает характеристику объекта «color». Выражение означает «фоновый цвет». То есть это цвет, и у него есть характеристика — он фоновый. В color of the background" оба «color» и «background» являются noun. Это выражение означает «цвет фона». Тут фон — это некоторый объект, у которого есть цвет.

Ну и здесь background может быть noun adjunct, а не adjective. Непонятно, как делать выбор. Интересно, что «the background color» гугл-переводчик переводит как «цвет фона», но «background color» как «фоновый цвет». Сильно зависит от контекста.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Аналогичное свойство в русском языке — может обычное дополнение?

Сомневаюсь. В английском есть два способа, для которых в русском — только один.

Adjunct как раз переводится как «дополнение».

Если переводить слова отдельно и выдавать это за перевод, получится ПРОМТ. «Спасите часто! Самолёты забвения опасное место!»

С другой стороны, пример «chicken soup» (из вики) канонично перевести как «куриный суп», несмотря на то, что это noun adjunct. Тогда почему «правила форума», но при этом не «форумные правила»? В общем пока не ясно.

Причина всегда одна: «так не говорят».

Ну и здесь background может быть noun adjunct, а не adjective. Непонятно, как делать выбор.

Зачем? Ты же не пытаешься сделать ещё один ПРОМТ. Всё равно при переводе нужно будет понять написанное, а потом описать как можно ближе, но с учётом норм языка назначения. Попытки найти набор правил трансляции вручную уже давно провалились.

гугл-переводчик переводит как

Он же статистический. Там много всяких ляпов бывает. В интернетах есть примеры с полным перевиранием смысла.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Он слово «позитивный» в смысле «положительный» переводил как «негативный» в смысле «отрицательный» в довольно простой фразе и такая херня довольно часто. Хуже промта, право.

anonymous
()

Я тупой

Согласен.

Можно рассматривать self как доступ к неймспейсу экземпляра (инстанса, instance) класса. Чтобы объект мог вызывать свои методы и брать значения из своих же атрибутов, ему надо как-то получить к ним доступ. В глобальном пространстве имен их, естественно, не видно, в локальном — тоже, как быть? Питон пихает в каждый метод экземпляра класса ссылку на него самого («self» внезапно переводится как «сам»), это такое соглашение — пихать первым, хотя можно было и последним и любым по порядку. Еще одно соглашение, но вообще устное и якобы необязательное, это называть self self'ом, потому что в синтаксическом плане это обычный аргумент функции, и его можно именовать как угодно.

Под капотом этот механизм довольно логично устроен и продуман, но человеку, не могущему понять, что переменная «self» в параметрах метода экземпляра класса это ссылка на его неймспейс, до таких деталей скоро не добраться.

А ведь есть еще и cls :D.

Virtuos86 ★★★★★
()
Последнее исправление: Virtuos86 (всего исправлений: 1)
Ответ на: комментарий от Virtuos86

Основываясь на данном соглашении, можно выполнять monkey patching объектов в рантайме:

class Foo(object): pass

foo = Foo()
bar = Foo()

def f(self):
    print self

foo.f = f
print foo.f()
print bar.f()
У инстанса foo теперь есть «метод» f, хотя функция f и не объявлена, как метод класса Foo, у инстанса bar такого метода нет.

Если внимательно посмотреть, то можно заметить, что foo.f это не метод, а атрибут, поле объекта. Тем не менее, даже при доступе к атрибутам объекта Питон передает self! Как это работает? Копай, разбирайся.

Virtuos86 ★★★★★
()
Ответ на: комментарий от Crocodoom

Сможете мне объяснить разницу между «the forum rules» и «rules of the forum»? Или между «the background color» и «color of the background»?

не знаю, зачем я это пишу тебе, но в «the forum rules» артикль относится к rules, а в «rules of the forum» - к forum. но ты же даже разницы между наличием the и его отсутствием не поймешь...

MyTrooName ★★★★★
()
Ответ на: комментарий от i-rinat

С другой стороны, пример «chicken soup» (из вики) канонично перевести как «куриный суп», несмотря на то, что это noun adjunct. Тогда почему «правила форума», но при этом не «форумные правила»? В общем пока не ясно.

Причина всегда одна: «так не говорят».

Ну и здесь background может быть noun adjunct, а не adjective. Непонятно, как делать выбор.

Зачем? Ты же не пытаешься сделать ещё один ПРОМТ. Всё равно при переводе нужно будет понять написанное, а потом описать как можно ближе, но с учётом норм языка назначения. Попытки найти набор правил трансляции вручную уже давно провалились.

Значит мы снова вернулись на плоскость «так (не) говорят», не найдя формального критерия. Такого критерия, который бы однозначно перевести «class object».

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

по отношению ко мне

не принимай на свой счет, это мой дефолт

MyTrooName ★★★★★
()
Ответ на: комментарий от Crocodoom

однозначно перевести «class object».

это вообще не всегда возможно - однозначно переводить с одного языка на другой.

но если в одном и том же тексте могут встретиться и class object, и object of class, причем означают они разные вещи, то переводить их нужно однозначно по-разному.

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от Crocodoom

На вот тебе, Python in a nutshell:

https://www.oreilly.com/library/view/python-in-a/9781491913833/ch04.html

A class is a Python object with several characteristics:

You can call a class object as if it were a function. The call, often known as instantiation, returns an object known as an instance of the class; the class is known as the type of the instance.

Если уж не веришь людям, которые английский знают лучше тебя (а это видно, уж извини).

На крайняк можешь Гвидо написать и спросить, что именно он имел в виду ;)

leave ★★★★★
()
Ответ на: комментарий от Crocodoom

однозначно перевести

Такого в принципе нет.

мы снова вернулись на плоскость

В питонотьюториале не используется формулировка object of a/the class, зато используется class object, instance object и method object. И class object существенно отличается от instance object.

i-rinat ★★★★★
()
Ответ на: комментарий от leave

Я не знаю, по какой диагонали и с какой скоростью нужно было читать тред, чтобы кинуть в меня определением термина «class object»! Это вообще-то ТС спрашивал, а я как раз ему ответил, что оно из себя представляет.

А далее мы обсуждаем корректный перевод этого термина на русский. Многие, как выяснилось, против перевода «объект класса».

Crocodoom ★★★★★
()
Ответ на: комментарий от i-rinat

В питонотьюториале не используется формулировка object of a/the class, зато используется class object, instance object и method object. И class object существенно отличается от instance object

Дальше-то что? Стоял вопрос перевода этого хозяйства на русский.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Стоял вопрос перевода этого хозяйства на русский.

Зачем?

i-rinat ★★★★★
()
Ответ на: комментарий от Crocodoom

Многие, как выяснилось, против перевода «объект класса».

Я был против

Термины «class object» и «object of class» полностью эквивалентны синтаксически, поскольку и там и там это притяжательный падеж.

Но меня, похоже, тоже записали в противники конкретного перевода конкретного выражения?

Теперь мне стало интересно, как ты остальные термины переведёшь.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Стоял вопрос перевода этого хозяйства на русский.

Зачем?

Это не ко мне. Я вообще заехал в тред объяснить ТС разницу (по существу) между class object и instance object, и вроде как успешно объяснил, а потом ввязался в это лингвистическое болото.

Я был против

Термины «class object» и «object of class» полностью эквивалентны синтаксически, поскольку и там и там это притяжательный падеж.

С притяжательным падежом я промахнулся, признаю. Но по смыслу эти конструкции всё равно эквивалентны, как «forum rules» и «rules of the forum» (для чего я и тащил эти примеры).

Теперь мне стало интересно, как ты остальные термины переведёшь.

Какие остальные?

Crocodoom ★★★★★
()
Ответ на: комментарий от former_anonymous

former_anonymous

jollheef

former_anonymous

В Си также нету ограничений доступа private/protected.

Есть, но реализуется не на уровне классов, а на уровне модулей.

ты имеешь ввиду что-то типа pimpl?

Зачем так сложно? Достаточно определить класс в отдельном модуле (читай «файле»), и все приватные функции определить как static. Static функции нельзя использовать за пределами модуля.

Например, даже если ты явно сделаешь явный declaration прототипа функции:

user@localhost /tmp $ cat foo.h
void foo_public(void);
void foo_private(void);
user@localhost /tmp $ cat foo.c
static void foo_private(void)
{
        /* ... */
}

void foo_public(void)
{
        /* ... */
}
user@localhost /tmp $ cat main.c
#include <stdlib.h>

#include "foo.h"

int main(void)
{
        foo_private();
        foo_public();
        return EXIT_SUCCESS;
}
user@localhost /tmp $ cc main.c foo.c
Undefined symbols for architecture x86_64:
  "_foo_private", referenced from:
      _main in main-cbce14.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Такие дела! Речь понятно, совсем не ООП (для этого есть С++), а о том, что разграничение между реализацией и интерфейсом — существует и используется.

Причем дело не только в этом разграничении, но и в том, что компилятор не будет удалять неиспользуемые функции в том случае, если они экспортируются из модуля (т.е. определены без static).

Deleted
()
Ответ на: комментарий от Crocodoom

Но по смыслу эти конструкции всё равно эквивалентны, как «forum rules» и «rules of the forum» (для чего я и тащил эти примеры).

По смыслу есть классы и объекты. Объекты являются экземплярами классов. Чтобы назвать Rectangle() мы говорим объект класса «прямоугольник» либо object of rectangle class или object of class rectangle. Это общепринятая терминология в ООП.

У Гвидо в его книжке в 9 главе описываются три типа объектов в питоне: class object, instance object и mehtod object (типов объектов больше, в девятой же главе упоминается function object). На русский это переводится как объект типа класс, объект типа инстанция/экземпляр и объект типа метод. Либо объект-класс, объект-экземпляр и объект-метод.

Так что нет, object of class и class object не имеют ничего общего.

anonymous
()
Ответ на: комментарий от Crocodoom

Но по смыслу эти конструкции всё равно эквивалентны, как «forum rules» и «rules of the forum»

Эм, нет. С правилами форума проблем нет, потому что нет разночтений. С объектом класса сложнее, потому что может подразумеваться как отдельный экземпляр, один из многих, созданных по некоторому плану, так и сам план как некая сущность. Лично у меня class object легко ложится на оба варианта, тогда как object of the class — только на первый.

Какие остальные?

instance object, method object, instance variable, class variable, instance method object, function object, class method, static method

i-rinat ★★★★★
()
Ответ на: комментарий от Crocodoom

мы снова вернулись на плоскость «так (не) говорят», не найдя формального критерия. Такого критерия, который бы однозначно перевести «class object».

«Так не говорят» вполне однозначный критерий. Есть сформировавшаяся традиция относительно перевода терминов ООП на русский язык и «объект (класса)» в этой традиции это именно инстанс, а не что-то другое.

И тому есть причина. Если посмотреть на выражения «объект (чей?) класса» и «экземпляр (чей?) класса» то становится непонятно, а почему они должны обозначать разные сущности? Почему я должен понимать «экземпляр класса» в отличие от «объект класса» именно как инстанс, а не как «экземпляр объекта класса» т.е. тот самый class object? Из самой фразы никак не следует что «объект» и «экземпляр» относятся к классу по разному, т.к. в фразе они относятся к слову «класс» одинаково, что выражено падежом. Понятие экземпляр, вместо понятия объект используется только лишь по той причине, что производные от класса сущности не всегда именно объекты (в контексте языка), а могут быть например массивами, или вообще чем-то специальным (неймспейсы).

Поэтому в русской традиции «объект класса» и «экземпляр класса» обозначают по отношению к классу одно и то же (инстанс), а собственно class object и подобные штуки называются метаобъектами - в том смысле, что это объекты порождающие другие объекты.

Я понимаю конечно, что у питонистов «свой путь», но давайте хотя бы не путать людей выдумывая свой птичий язык.

PS: и да, лучше к питону для изучения ООП вообще не прикасаться, чтобы не пачкаться об язык в котором нет нормальных объектов, а только какая-то кривая эмуляция на неймспесах, для которой еще и приходится изобретать свою сектантскую особую терминологию.

no-such-file ★★★★★
()
Ответ на: комментарий от Crocodoom

"class object" и "object of class"

А вы так и не договорились?

Мне кажется, во втором случае no-such-file говорит о «object of class X», а ты - об «object of class 'class'», оба опуская последнее слово. Тут не о чем спорить, вы оба правы, если без сокращений.

DonkeyHot ★★★★★
()
Ответ на: комментарий от Crocodoom

Так ты определение-то осилил или нет?

leave ★★★★★
()
Ответ на: комментарий от aquadon

Когда ты вызываешь obj.method(), на самом деле вызывается cls.method(obj).

Но cls.method(obj) это на самом деле metacls.method(cls, obj), и эта цепочка никогда не кончится. Шах и мат, аметисты!

Jini ★★
()
Ответ на: комментарий от Jini

эта цепочка никогда не кончится

«Там дальше вниз - одни черепахи». (с)

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от Shtsh

Промурлычит только сам класс, а коты об этом ничего не узнают.

Для ещё большей справедливости тебе придётся сделать котов синглтоном и обернуть метод, так чтобы он получал инстанс кота синглтона. Вот тогда мб.

WitcherGeralt ★★
()
12 апреля 2020 г.

Self нужен для того, чтобы привязать метод(функцию) к данному классу.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.