Я новичок в openERP и у меня собеседование. Пожалуйста, объясните идею различных типов наследования в openERP, я думаю, что всего 3 типа. пожалуйста, объясните это очень просто с точки зрения интервью.
P.S: я знаком с концепцией простого наследования.
Наследование в openERP (odoo)
Ответы (1)
Наследование:
Механизм наследования используется для создания идеи повторного использования. Повторное использование означает повторное использование кода родительского класса в любом объектно-ориентированном программировании.
Преимущества:
- Уменьшите избыточность кода.
- Обеспечивает повторное использование кода.
- Уменьшает размер исходного кода и улучшает его читаемость.
- Код прост в управлении и разделен на родительские и дочерние классы.
- Поддерживает расширяемость кода, переопределяя функциональность базового класса в дочерних классах.
Недостатки:
В Inheritance базовый класс и дочерние классы тесно связаны. Следовательно, если вы измените код родительского класса, он повлияет на все дочерние классы.
В иерархии классов многие элементы данных остаются неиспользованными, а выделенная им память не используется. Следовательно, повлияйте на производительность вашей программы, если вы неправильно реализовали наследование.
В OpenERP есть два способа наследования.
1. Классический вариант с использованием Pythonic:
Это позволяет добавить к модели определенное «общее» поведение, наследуя классы, производные от orm.Model, такие как geoModel, которые добавляют поддержку географики.
class Myclass(GeoModel, AUtilsClass):
Использование _inherit :-
Основная цель — добавить новые модели поведения/расширить существующие модели. Например, вы хотите добавить новое поле в счет-фактуру и добавить новый метод
class AccountInvoice(orm.Model):
_inherit = "account.invoice"
_column = {'my_field': fields.char('My new field')}
def a_new_func(self, cr, uid, ids, x, y, context=None):
# my stuff
return something
переопределить существующий метод:
def existing(self, cr, uid, ids, x, y, z, context=None):
parent_res = super(AccountInvoice, self).existing(cr, uid, ids, x, y, z, context=context)
# my stuff
return parent_res_plus_my_stuff
2. Полиморфный способ:-
Использование _inherits :-
При использовании _inherits вы будете делать своего рода полиморфную модель в виде базы данных.
Например, product.product
наследует product.template
или res.users
наследует res.partner
. Это означает, что мы создаем модель, которая получает ноу-хау модели, но добавляет дополнительные данные/столбцы в новую таблицу базы данных. Таким образом, когда вы создаете пользователя, все данные о партнере сохраняются в таблице res_partner
(и партнер создается), а вся информация, связанная с пользователем, сохраняется в таблице res_users
.
Для этого мы используем dict: _inherits = {'res.partner': 'partner_id'}
Ключ соответствует базовой модели, а значение внешнего ключа — базовой модели.
То же самое с помощью XML вы можете наследовать представления Odoo (такие как представление формы, представление дерева, представление поиска и т. д.), а также изменять поведение представления
Ключевой момент:
Вышеупомянутые два метода могут быть применены на стороне сервера Odoo, и вы можете изменить поведение существующего представления или любые другие вещи, которые вы можете изменить в представлениях Odoo, с эффектом на вашей стороне клиента.
Я надеюсь, что это должно быть полезно для вас ..:)