如何覆盖 python 库的函数?

par*_*ola 5 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
Run Code Online (Sandbox Code Playgroud)

现在,我正在使用这种dump方法,我想print_node用我自己的print_node方法覆盖该函数,因为我想以不同的方式打印它。最好的方法是什么?

Kas*_*mvd 6

您可以自己创建一个继承自预期模块的类,并以任何您想要的方式重写该函数。然后你可以使用你的对象而不是module.py.

class my_class(module):
    def __init__(self, *args, **kwargs):
        super(my_class, self).__init__(*args, **kwargs)
    def dump(self):
        # do stuff
Run Code Online (Sandbox Code Playgroud)

正如您在评论中提到的,如果您的模块包含一堆函数,您最好在当前模块中定义新函数。然后您可以将其分配给该函数名称。

正如@Joran Beasley 也提到的,你可以执行以下操作

import my_file
my_file.dump = my_local_dump_fn
Run Code Online (Sandbox Code Playgroud)