2015-06-08 16 views
3

Я новичок в openERP и имею интервью. Пожалуйста, объясните идею разных типов наследования в openERP, я думаю, что это всего 3 типа. пожалуйста, объясните это очень просто с точки зрения интервью.
P.S: Я знаком с концепцией простого наследования.Наследование в openERP (odoo)

ответ

9

Наследование:

механизм наследования используется для создания идеи повторного usability.there повторно юзабилити означает, что повторное использование кода родительского класса в любой объектно-ориентированного программирования.

Преимущества:

  1. Сокращение кода избыточности.
  2. Обеспечивает повторное использование кода.
  3. Уменьшает размер исходного кода и улучшает читаемость кода.
  4. Код прост в управлении и разделен на родительский и дочерний классы.
  5. Поддерживает расширение кода путем переопределения базового класса функциональность в дочерних классах.

Недостатки:

  1. В Наследование классов базового класса и ребенка тесно связаны между собой. Следовательно, если вы измените код родительского класса, он будет влиять на все дочерние классы.

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

Существует два способа наследования в OpenERP.

1.Classical Использование Pythonic Путь:

Это позволяет добавлять конкретные «родовую» поведение модели путем наследования классов, которые проистекают из orm.Model как Geomodel, который добавляет поддержку goegraphic.

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.Полиморфный Way: -

Использование _inherits: -

При использовании _inherits вы будете делать вид полиморфных модели на пути к базе данных.

Например product.productнаследуетproduct.template или res.usersнаследованнаяres.partner. Это означает, что мы создаем модель, которая получает представление о модели, но добавляет дополнительные данные/столбцы в новую таблицу базы данных. Поэтому, когда вы создаете пользователя, все данные партнера хранятся в таблице res_partner (и создается партнер), и вся информация, связанная с пользователем, хранится в таблице res_users.

Для этого используется dict: _inherits = {'res.partner': 'partner_id'}. Ключ соответствует базовой модели и значению внешнего ключа базовой модели.

Как же через XML вы можете сделать унаследуют вид Odoo (вид по форме, вид дерева, поиск Просмотр и т.д ..), и вы можете также изменить поведение с точки зрения

Ключевой момент:

Вышеуказанный два метода могут применяться на стороне сервера Odoo и которые вы можете изменить поведение существующего представления или любые другие вещи, которые вы можете изменить в Odoo, рассматривая эффект на вашей стороне клиента.

Я надеюсь, что это должно полезно для вас .. :)

+0

Вы пропустили 3-ий, который упоминается в odoo документации. это не настоящее наследование, а копия атрибутов моделей путем объединения _inherit и _name. Может быть, вы тоже должны это упомянуть? :-) – CZoellner

+0

Yup спасибо за комментарий –

+0

Можем ли мы использовать _inherits & _inherit оба одновременно? @DASADIYACHAITANYA –

Смежные вопросы