Если я вас правильно понимаю, у вас есть что-то , которое вы хотите представить в нескольких программах как объект. Чтобы сделать вещи более интересными, если ваш объект используется в контексте программы Django, вы хотели бы, чтобы ваш объект был моделью Django, чтобы вы могли сохранить свой объект в базе данных и выполнять все остальные операции. вещи, которые Django может сделать с моделью. Предположительно, хотя вы не указываете это явно, вместо того, чтобы просто перечислять свойства объекта, у вас есть поведение, которое вы хотели бы реализовать в своем объекте независимо от среды (Django или иным образом).
Если бы вы реализовывали это на Java или C #, я бы предложил что-то вроде этого:
interface IFoo { ... }
class FooHelper { ... }
class app1.Foo extends Model implements IFoo { ... }
class app2.Foo implements IFoo { ... }
Для каждого метода, доступного в IFoo
, оба app1.Foo
и app2.Foo
должны будут реализовать метод путем делегирования подходящему методу в FooHelper
. Например, метод bar
будет выглядеть следующим образом:
interface IFoo {
int bar();
}
class FooHelper {
int bar( object foo ) { ... }
}
package app1;
class Foo extends Model implements IFoo {
...
int bar() {
return FooHelper.bar( this );
}
}
package app2;
class Foo implements IFoo {
...
int bar() {
return FooHelper.bar( this );
}
}
Конечно, FooHelper должен быть достаточно умен, чтобы делать правильные вещи, в зависимости от того, какой тип Foo ему передается.
Решение этого в Python должно быть проще, поскольку Python является динамическим языком.
# Create a class decorator
def decorate_foo( fooclass ):
def bar( self ):
return 0
fooclass.bar = bar
# Create a class to decorate
class Foo: pass
# Decorate the class
decorate_foo( Foo )
# Use the decorated class
f = Foo()
f.bar()
Просто поместите всю свою функциональность в функцию decorate_foo, а затем позвольте ей добавить эту функциональность в класс, прежде чем вам потребуется вызывать один из добавленных методов.