如何解决具有部分功能的动态python类
print(我对python3中似乎有bug感到困惑。
import types
def class_body(ns):
ns.update({"a": lambda self,x: x - 1})
return ns
newc = types.new_class("foo",exec_body=class_body)
print(newc().a(3))
# prints 2 as expected
但是我也想动态地创建类方法。我似乎可以执行以下操作:
import types
def funcs_gen(k=1):
def fn(self,a):
return a + k + self.i
return fn
def class_body(ns):
ns.update({"a": funcs_gen(k=2),"i": 5})
return ns
newc = types.new_class("foo",exec_body=class_body)
print(newc().a(1))
# prints 8 as expected
但是,如果我尝试对部分函数执行相同的操作,似乎会发生一些奇怪的事情:
import types
from functools import partial
def fn(self,a,k=1):
return a + k + self.i
def class_body(ns):
ns.update({"a": partial(fn,k=2),exec_body=class_body)
print(newc().a(1))
# Unexpectedly produces: `TypeError: fn() missing 1 required positional argument: 'a'`
解决方法
将partialmethod
用于方法。
post
输出:
import types
from functools import partialmethod
def fn(self,a,k=1):
return a + k + self.i
def class_body(ns):
ns.update({"a": partialmethod(fn,k=2),"i": 5})
return ns
newc = types.new_class("foo",exec_body=class_body)
print(newc().a(1))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。