【问题标题】:replace python parent function with child function用子函数替换python父函数
【发布时间】:2017-03-19 10:07:12
【问题描述】:

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

【问题讨论】:

  • 如何调用代码?什么向您表明它不起作用?
  • 那样不行。如果你有一个test_me 实例,它不会使用来自test_new 类的方法。
  • 当我调用 get_uid 时,我没有得到打印函数,并且在项目中 test_inherit 已经存在并由 (get_inherit.get_uid) 调用,但我需要替换函数 get_uid 而无需替换主项目中的任何内容
  • @MostafaMohamed 编辑您的问题并确切地显示您正在做什么给您带来问题。
  • 我们是程序员……在代码中与我们交谈!当我修复您示例中的一些错误以使其正常工作,然后执行test_new().get_uid('some node') 时,将调用子方法。您能否将您的代码修改为一个工作示例并包含显示问题的测试代码?

标签: python python-2.7 inheritance


【解决方案1】:

子类化改变了子类的行为,但对父类没有影响。一个类可能有很多继承者,即使可以调用,也不清楚应该调用哪个子类。

您可以按照以下示例对父级进行猴子修补。我将类名用驼峰命名,以帮助从变量名中脱颖而出。风险在于补丁之前调用的代码获取旧的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"

【讨论】:

  • 我喜欢你的回答,我有,你告诉我如何解决我的问题。谢谢
猜你喜欢
  • 2013-02-25
  • 2013-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-23
相关资源
最近更新 更多