2016-05-31 95 views
0

我正在使用一個python庫,我需要重寫其中一個函數。讓我們把這種 module.py如何覆蓋python庫的函數?

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 

現在,我使用這個轉儲方式,我想用我自己的方法print_node覆蓋print_node功能,因爲我要打印以不同的方式。什麼是最好的方式來做到這一點?

+0

注意,你已經與python2.7這個標記,並在2.7打印不是一個函數。你可以從你的文件的頂部導入print_function以改變它(它在python3中被改變爲一個函數,部分出於這個原因) –

+0

這是可行的,但幾乎總是一個壞主意。 – user2357112

+0

@ user2357112標題中的問題是一個糟糕的主意,但巴黎事實上試圖做的不是IMO。覆蓋默認函數可能會導致可維護性問題,但是想要自定義打印函數並不壞 - 我只是將它命名爲不同的東西,例如,打印和寫入日誌的print_and_log可能非常有用 –

回答

0

您可以自行創建一個繼承自預期模塊的類,並以任何您想要的方式覆蓋該函數。然後你可以使用你的對象而不是module.py

class my_class(module): 
    def __init__(self, *args, **kwargs): 
     super(my_class, self).__init__(*args, **kwargs) 
    def dump(self): 
     # do stuff 

正如您在評論中提到的,如果您的模塊包含一堆函數,您最好在當前模塊中定義新函數。然後,您可以將其分配給該功能名稱。

由於@Joran比斯利也提到了,你可以這樣做以下

import my_file 
my_file.dump = my_local_dump_fn 
+0

該模塊沒有類。這只是一堆功能。 –

+0

在這種情況下,您可以不在當前模塊中定義新功能。然後,您可以將其分配給該功能名稱。 – Kasramvd

+1

'import my_file'; 'my_file.dump = my_local_dump_fn'在你完成這個操作後導入這個方法的任何地方都應該得到你的重載函數... –