【问题标题】:How to override function in python for objects如何在python中为对象覆盖函数
【发布时间】:2021-02-05 06:04:20
【问题描述】:

我在 python 2.7 中有一个项目。 用户会给我一个函数实现,我将用用户的实现覆盖我的基类函数。会有很多用户。

class Base():

    def my_fun(self,x,y,z):
        ## to be overriden by user's function

from user_defined import user_function

base = Base()
base.my_fun = user_function

我是 python 新手,如何在 python 中实现虚拟函数之类的东西,或者实现这一点的最佳方法是什么。此外,要覆盖该功能,我必须导入用户定义其功能的所有文件。这如何在 for 循环中完成?

【问题讨论】:

标签: python python-2.7 oop virtual-functions


【解决方案1】:

方法与实例绑定的几种方式,选择一种,循环函数,绑定。

base.my_fun = user_function.__get__(base)

第二种方式:

import types
base.my_fun = types.MethodType(user_function, base)

第三种方式:

from functools import partial
base.my_fun = partial(user_function, base)

最后一种方式:

def bind(instance, method):
    def binding_scope_fn(*args, **kwargs):
        return method(instance, *args, **kwargs)
    return binding_scope_fn

base.my_fun = bind(base, user_function)

【讨论】:

  • 如何循环导入函数?我将获得一个目录的路径,该目录包含用户实现该功能的所有文件。
  • 我认为你需要一个地图,它呈现基本功能和用户功能的关系,然后循环地图的项目。
猜你喜欢
  • 2021-10-15
  • 2019-11-14
  • 2021-10-16
  • 2021-12-12
  • 1970-01-01
  • 1970-01-01
  • 2018-12-08
  • 2011-01-29
  • 1970-01-01
相关资源
最近更新 更多