如何重写python库的函数?
我使用的是一个python库,需要重写其中一个函数。让我们将其称为module.py:如何重写python库的函数?,python,python-2.7,Python,Python 2.7,我使用的是一个python库,需要重写其中一个函数。让我们将其称为module.py: def dump(nodes, args = 'bleh' ): ...validation checks for node in nodes: print(node, someother_args) def print_node(node, someother_args): ...prints in some way i don't want 现在,我正在使用这个dump方法,我想用
def dump(nodes, args = 'bleh' ):
...validation checks
for node in nodes:
print(node, someother_args)
def print_node(node, someother_args):
...prints in some way i don't want
现在,我正在使用这个
dump
方法,我想用我自己的print\u node
方法覆盖print\u node
函数,因为我想以不同的方式打印它。最好的方法是什么?您可以自己创建一个从预期模块继承的类,并以任何方式重写函数。然后可以使用对象而不是module.py
class my_class(module):
def __init__(self, *args, **kwargs):
super(my_class, self).__init__(*args, **kwargs)
def dump(self):
# do stuff
正如您在评论中提到的,如果您的模块包含一组函数,那么您最好在当前模块中定义新函数。然后您可以将其分配给该函数名
正如@Joran Beasley也提到的,你可以做如下事情
import my_file
my_file.dump = my_local_dump_fn
请注意,您已经用python2.7对其进行了标记,在2.7中,print不是一个函数。您可以从文件顶部的future导入print_函数来更改它(它在python3中被更改为函数,部分原因是),这是可行的,但几乎总是一个坏主意。@user2357112标题中的问题是一个坏主意,但paris实际上试图做的事情不是,在我看来,覆盖默认函数可能会导致可维护性问题,但想要一个自定义打印函数并不坏——我只是给它取了个不同的名字,例如,打印和写入日志的打印和日志可能非常有用哦,对不起,@en\u Knight你说得对。这是该库的print_节点函数,而不是python的默认打印函数。您要做的就是所谓的monkey patching。查一下,那个模块没有类。这只是一堆函数。在这种情况下,您可以不在当前模块中定义新函数。然后您可以将其分配给该函数名。
导入我的_文件
my_file.dump=my_local\u dump\u fn
在完成此操作后导入此方法的任何位置都应获得覆盖的函数…@Jordan Beasley,是的,这项工作很有效。但是,我使用的是dump函数,它使用print_节点函数。dump执行一些验证检查和arg操作。我只是想改变打印节点的功能,好吧,我明白了,这样我就可以导入我的打印文件了;my_file.print_node=my_local_print_node。谢谢