Python 从另一个模块重写方法
我正在使用并希望覆盖现有方法。但是,我的代码从不调用修改Python 从另一个模块重写方法,python,oop,inheritance,module,Python,Oop,Inheritance,Module,我正在使用并希望覆盖现有方法。但是,我的代码从不调用修改 from jira import JIRA from jira.resources import Issue class Issue(Issue): def update(self): print("overwritten") super(Issue, self).update() # I also tried super().update() jira = JIRA("...") # hol
from jira import JIRA
from jira.resources import Issue
class Issue(Issue):
def update(self):
print("overwritten")
super(Issue, self).update() # I also tried super().update()
jira = JIRA("...") # holds a reference to the JIRA instance
issues = jira.search_issues("") # holds a list of JIRA Issues
for issue in issues:
// I would expect this call to print "overwritten"
issue.update()
您可以使用如下包装器对该方法进行monkey修补:
from jira.resources import Issue
def my_update(self):
print('overwritten')
original_update(self)
original_update = Issue.update
Issue.update = my_update
为什么您希望使用子类呢?你可以尝试猴子补丁,但那总是一个错误。@juanpa.arrivillaga我试图避免猴子补丁,并希望覆盖现有的
问题。update
方法可以被覆盖,即用自身子类化问题类(通过类问题(问题):
)并重新定义现有的更新()
method…猴子补丁没有错,除非它涉及到复制和粘贴原始代码。作为一个包装器,如我的回答所示,它一点也不危险。