我在使用python进行继承时遇到了问题。
我需要覆盖一个python函数,并且只要该类调用它就应该调用子方法而不是父方法。
这是代码: 在名为test_inherit.py
的文件中class test_me(object):
def get_uid(self, node):
return uid
我做的是: 在名为test_new.py的文件中
from test_inherit import test_me
class test_new(test_me)
def get_uid(self,node):
print "X is here",node
return uid
我需要当我调用test_me类或test_new类时,它应该调用test_new类的get_uid,但我不知道如何实现它?!
这很简单..我有一个有这个课程的项目" test_me"其中包含一个名为get_uid的函数,并且在项目中多次调用该函数,我希望在调用父函数时调用子函数,因为我不想更改主项目,我想在单独的文件中进行编辑。
答案 0 :(得分:0)
子类化会更改子类的行为,但这对父级没有影响。一个类可能有很多继承者,即使可以,也不清楚应该调用哪个子类。
您可以对父级进行猴子修补,如以下示例所示。为了帮助从变量名中脱颖而出,我使用了类名来帮助我。风险是在修补之前调用的代码获得旧的uid方法。
class TestMe(object):
def get_uid(self, node):
return "parent"
test1 = TestMe()
uid1 = test1.get_uid()
# monkey-patch to modify parent class
def _my_get_uid(self, node):
print "Parent hacked", node
return "hack"
TestMe.get_uid = _my_get_uid
test2 = TestMe()
assert uid1 == "parent", "cant change old calls"
assert test1.get_uid(1) == "hack", "existing objects changed"
assert test2.get_uid(1) == "hack", "new objects changed"