Я хочу иметь суперкласс, который будет наследоваться подклассами.Как закодировать поле суперкласса, которое принимает несколько подклассов?
Предположим, я хочу, чтобы суперкласс mother
был унаследован child.a
и child.b
.
Так что я сделать эти классы
мать:
class mother(osv.osv):
_name = "mother"
mother()
child.a:
class child_a(osv.osv):
_name = "child.a"
_inherit = "mother"
child_a()
child.b:
class child_b(osv.osv):
_name = "child.b"
_inherit = "mother"
child_b()
теперь давайте говорить, что я есть класс a
tha т имеют many2one
подключение к mother
class a(osv.osv):
_name = "a"
_columns = {
'mother' : fields.many2one('mother', 'Mother'),
}
a()
ли принимать mother
поле как класс child.a
и child.b
. Если да, то как закодировать методы создания и записи. Если нет, то каким образом я могу достичь этого иначе? (поле, принимающее несколько подклассов)
Из примера два 'many2one' поля добавляются в' mother', но не накладывают на создание создание 'mother' для каждого времени создания ребенка? Разве не разумнее добавить вместо этого обязательное поле «many2one mother» для ребенка? Я до сих пор не понимаю эту концепцию. – William
Хитрость заключается в том, чтобы не думать об этом как о фактическом «наследовании объекта», просто подумайте о «копировании модели».Честно говоря, этот метод наследования полезен только для расширения класса. Чтобы создать производный класс, вы должны действительно использовать наследование делегирования. –
Но оба производных класса (child_a, child_b) не будут вписываться в одно поле 'many2one mother 'в модели' a', не так ли? – William