Нет действительно "хорошего" способа сделать это. Лучшее, что вы можете сделать, это что-то вроде этого:
# class defined as normally above, but now you want to change a funciton
def new_print_api(self, obj):
# redefine the function (have to rewrite it)
...
# now set that function as the _print_api function in the intro class
intro._print_api = new_print_api
Это будет работать, даже если вы уже определили объекты вступления (то есть когда вы вызываете introObject._print_api для уже созданного объекта, он вызовет новую функцию, которую вы установили). К сожалению, вам все еще нужно переопределить функцию, но по крайней мере вам не нужно переписывать весь класс.
В зависимости от вашего варианта использования, лучше всего иметь его в отдельном модуле. import
класс и, когда вам нужно что-то изменить, просто используйте функцию reload()
. Однако это не повлияет на предыдущие экземпляры класса (это может или не может быть тем, что вы хотите).