动态绑定方法到python中的类实例
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了动态绑定方法到python中的类实例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1463字,纯文字阅读大概需要3分钟。
内容图文
假设我有一个在moduleA.py中定义的类,我想添加一个方法,使用某种加载器方法,它取一个第二个模块的名称和那里定义的应绑定的方法
class ClassA(object):
def __init__(self,config):
super(ClassA, self).__init__()
self.a = 1
self.b = 2
self.meth1 = self. bind_method(config)
def bind_method(self,config):
# load method
<return method defined in config as a str 'moduleB.meth2'>
def calling_method():
return self.meth1()
其中moduleB.py中定义的方法如下所示:
def meth2(self):
return self.a + self.b
关键是我希望能够编写meth2,以便在绑定后能够访问ClassA的类变量.这样,当你有这样的东西:
from moduleA import ClassA
A = ClassA()
aout = A.calling_method()
调用A.calling_method()可以正确调用moduleB.py中定义的方法.
在使用types.MethodType实例化ClassA之后,我已经看到在SO上的答案中完成了这种绑定,但我无法挖掘如何在类定义中绑定,以便在实例化类时在内部完成.
任何有关bind_method方法应该包含的建议都将非常感激.
解决方法:
import sys
import types
def getobj(astr):
"""
getobj('scipy.stats.stats') returns the associated module
getobj('scipy.stats.stats.chisquare') returns the associated function
"""
try:
return globals()[astr]
except KeyError:
try:
return __import__(astr, fromlist=[''])
except ImportError:
modname, _, basename = astr.rpartition('.')
if modname:
mod = getobj(modname)
return getattr(mod, basename)
else:
raise
class ClassA(object):
def __init__(self, methpath):
super(ClassA, self).__init__()
self.a = 1
self.b = 2
self.meth1 = types.MethodType(getobj(methpath), self)
a = ClassA('moduleB.meth2')
print(a.meth1())
# 3
内容总结
以上是互联网集市为您收集整理的动态绑定方法到python中的类实例全部内容,希望文章能够帮你解决动态绑定方法到python中的类实例所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。