у меня есть библиотека с одним из родителей и дюжина детей:settattr для родительского класса для использования у детей
# mylib1.py:
#
class Foo(object):
def __init__(self, a):
self.a = a
class FooChild(Foo):
def __init__(self, a, b):
super(FooChild, self).__init__(a)
self.b = b
# more children here...
Теперь я хочу расширить эту библиотеку с простым (но немного spesific, для использования в другой подход). Поэтому я хотел бы изменить родительский класс и использовать его дочерние элементы.
# mylib2.py:
#
import mylib1
def fooMethod(self):
print 'a={}, b={}'.format(self.a, self.b)
setattr(mylib1.Foo, 'fooMethod', fooMethod)
И теперь я могу использовать его как это:
# way ONE:
import mylib2
fc = mylib2.mylib1.FooChild(3, 4)
fc.fooMethod()
или как это:
# way TWO:
# order doesn't matter here:
import mylib1
import mylib2
fc = mylib1.FooChild(3, 4)
fc.fooMethod()
Итак, мои вопросы:
- Это хорошая вещь ?
- Как это должно быть сделано лучше?
Что вы пытаетесь достичь? Зачем вам нужно динамически добавлять метод? – Pynchia
@ Pynchia, я спрашиваю, как это сделать лучше. Поэтому я должен использовать 'mylib1.Foo' и * all * его подклассы, и мне нужно иметь' fooMethod' во всех этих [под] классах. И я не хочу подклассифицировать все. – brownian