2016-12-21 15 views
2

Если есть классЕсть ли способ добавить аргумент в метод класса __init__ с патчем обезьяны?

Class A: 
    def __init__(arg1, kwarg1=...): 
     ...something happens here with args and kwargs 

есть способ, чтобы добавить еще один аргумент, обезьяну Patching этого класса? Как сохранить все, что происходит в нем, __init__ на месте, не повторяя его нигде?

+0

Почему вам нужно обезьяньего патч INIT специально? Не могли бы вы просто добавить новый атрибут непосредственно в экземпляр? –

+0

Возможно, вам захочется отделить определенные типы поведения, такие как вход в отдельную часть программы, например. –

ответ

0

Возможно, вы могли бы сделать то же самое, выполнив подклассификацию и не нуждаясь в патче обезьяны. Вы можете добавить новые позиционные аргументы или просто выбросить больше предметов в kwargs. Что-то вроде этого:

Class A: 
    """same class A as before""" 
    def __init__(self, arg1, kwarg1=...): 
     ...something happens here with args and kwargs 

Class B(A): 
    def __init__(self, another_arg, arg, **kwargs): 
     A.__init__(self, arg, **kwargs) 
     # B does something with another_arg here 
1

это работало:

from package import module 

class ChangedInitClass(module.SomeClass): 
    def __init__(self, arg1, another_arg, kwarg1=...): 
     super().__init__(arg1, kwarg1=kwarg1) 
     # does something with another_arg 

module.SomeClass = ChangedInitClass 
+0

Это в основном мой ответ ниже. –

+0

@Alex G Rice: вопрос о патче обезьяны, ваш ответ - нет, я не могу использовать наследование в одиночку, потому что я не могу касаться классов, которые унаследованы от того, что я исправляю и т. Д. И т. Д. – Bob

+1

Я вижу - извините, я неправильно понял вопрос. Рад, что вы решили его решить с помощью комбинации наследования и патча обезьяны. –

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

  • Нет связанных вопросов^_^