Как self в odoo представляет более одного экземпляра класса, используя обычное традиционное определение класса python, и перебирает их, используя for i in self

Я был запутан, когда писал свой вопрос, я чувствовал, что это был расплывчатый вопрос для некоторых читателей. Итак, я переписал вопрос еще раз, чтобы было ясно?

Я изучил объектно-ориентированное программирование с помощью Java. Насколько я знаю о self в python, это похоже на это в Java, два представляют экземпляр — один экземпляр — самого класса. Пример: self.name, self.age и т. д. ...

Итак, вопрос здесь: как разработчики платформы Odoo заставили self представлять более одного экземпляра класса и перебирать самого себя, используя традиционные обычное определение класса Python?

for i in self

Ответ не может быть получен с использованием обычного определения Python, они делают это с помощью мета-класса, как описано в URL-адресах в ответе на эти вопросы.


person Ahmed Kamal ELSaman    schedule 07.12.2016    source источник
comment
Какой у вас здесь вопрос? И почему вы считаете, что способ реализации набора записей (неупорядоченная, неизменяемая коллекция) не является питоническим? Что необычного в for record in self ?   -  person George Daramouskas    schedule 30.12.2016
comment
@GeorgeDaramouskas Вопрос не в том, как перебирать неупорядоченную неизменяемую коллекцию, вопрос в том, как мы используем self как неупорядоченную неизменяемую коллекцию для перебора экземпляров класса в python< /b>, вы не можете сделать это, используя определение обычного класса в python, вы должны использовать метакласс.   -  person Ahmed Kamal ELSaman    schedule 01.01.2017


Ответы (2)


Извините, что опоздал с публикацией моего ответа, я нашел свой пропавший без вести

Перебор экземпляров класса (сам) 01
Перебор экземпляров класса (я) 02< br> Перебор экземпляров класса (сам) 03

person Ahmed Kamal ELSaman    schedule 01.01.2017

В новом API, когда вы используете декоратор @.multi, odoo вызовет функцию, передающую в себя набор идентификаторов, например, если вы проверите запись в древовидном представлении и выберите «Удалить» в меню «Дополнительно», odoo упакует выбранную запись и вызовет метод только один раз и передать все записи в наборе записей, поэтому self - это список, который вы всегда должны использовать в цикле. Но если вы используете декоратор @api.one, он будет содержать только одну запись, вы не можете зациклить себя здесь. Поэтому, если вы выберете несколько записей в древовидном представлении и выполните какое-либо действие для выбранных 10 записей, adoo будет вызывать эту функцию 10 раз каждый раз с записью, это похоже на то, что он циклически выбрасывает выбранную запись и вызывает функцию, которую она не рекомендует. Для вычислительных полей декоратором является @api. В зависимости от того, что он ведет себя как @api.multi, здесь self представляет собой набор записей, поэтому всегда используйте цикл, иначе у вас будет ошибка, если вы не использовали специально древовидное представление. Я должен был узнать это с трудом, используется @api.depends с @api.one на том же методе в модели, которая содержит запись меллиона, которую я использовал print, чтобы увидеть работу на консоли. odoo назвал функцию миллион раз, так что никогда не будет используйте api.one onkply, если я уверен в этом

person Charif DZ    schedule 08.12.2016
comment
Спасибо за ответ и ценную поддержку, но это не то, что я искал. - person Ahmed Kamal ELSaman; 01.01.2017