用子函数替换python父函数

时间:2016-11-05 18:45:08

标签: python python-2.7 inheritance

我在使用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的函数,并且在项目中多次调用该函数,我希望在调用父函数时调用子函数,因为我不想更改主项目,我想在单独的文件中进行编辑。

1 个答案:

答案 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"