print(我对 python3 中的错误感到困惑。
我想用一些类方法动态创建一个类。我似乎能够这样做:
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), "i": 5})
return ns
newc = types.new_class("foo", exec_body=class_body)
print(newc().a(1))
# Unexpectedly produces: `TypeError: fn() missing 1 required positional argument: 'a'`
三国纷争
相关分类