Нового Питону здесь, и я ищу, чтобы прикрепить некоторый класс, ClassA.methodA к другому ClassB нижеПрикрепление метода класса к другому классу
def methodA(self, x=None, y=None, z='somevalue', l=None, m=False, **kwds):
... Some logic here....
a = self.getMyInstanceOfClassA() //a is of type ClassA, not ClassB
a.methodA(x,y,z,l,m,**kwds)
ClassB.methodA = methodA
...
h = ClassB()
h.methodA("p1", "p2", m=True)
Цель состоит в том, чтобы сохранить подпись ClassB.methodA так же, как предполагается, что он находится на фактическом ClassA.methodA, который доступен по методу ClassB.getMyInstanceOfClassA()
.
Причина Я делаю это, чтобы избежать моего пользователя, чтобы написать этот код
h = ClassB()
---the extra logic---
a = h.getMyInstanceOfClassA()
a.methodA(....)
вместо этого просто сказать
h = ClassB()
h.methodA(....)
и встроить дополнительную логику внутри нового Methoda на ClassB.
Methoda что-то значимое в нашей области, и я должен держать свое имя и точной подпись
я должен импортировать как CLASSA и ClassB от нашей внутренней LIBS и я не могу сделать ClassB наследовать от ClassA.
Дело в том, что метод A обычно не вызывается со всеми его аргументами, а переданные аргументы зависят от того, что вы хотите для методаA. Это h.methodA("p1", "p2", m=True)
не удается с некоторой ошибкой, жалуясь на то, что передал слишком много аргументов.
Я правильно обертываю методА?
Можете ли вы привести полный пример того, что вы используете (небольшой комплект, который работает на нашей машине) и полный трассировка? –
А что делает - 'a = self.embededClass()' give? Когда вы выполняете 'MyClass.methodA = methodA', вы переопределяете эту новую функцию на уровне класса, а не только для своих экземпляров, поэтому, если бы была предыдущая функция, если вы ее не сохранили, вы не сможете получить ее обратно , –
Код компании настолько сложнее поделиться, но я обновляю вопрос с дополнительной информацией. Надеюсь, теперь это станет яснее. – iCode