具有部分函数的动态python类

具有部分函数的动态python类,python,dynamic,Python,Dynamic,打印(我对python3中的bug感到困惑 我想用一些类方法动态创建一个类。我似乎可以这样做: 导入类型 def级阀体(ns): 更新({“a”:lambda self,x:x-1}) 返回ns newc=types.new\u class(“foo”,exec\u body=class\u body) 打印(newc().a(3)) #按预期打印2张 但我也希望动态创建类方法。我似乎能够执行以下操作: 导入类型 定义函数(k=1): def fn(自我,a): 返回a+k+self.i 返回

打印(我对python3中的bug感到困惑

我想用一些类方法动态创建一个类。我似乎可以这样做:

导入类型
def级阀体(ns):
更新({“a”:lambda self,x:x-1})
返回ns
newc=types.new\u class(“foo”,exec\u body=class\u body)
打印(newc().a(3))
#按预期打印2张
但我也希望动态创建类方法。我似乎能够执行以下操作:

导入类型
定义函数(k=1):
def fn(自我,a):
返回a+k+self.i
返回fn
def级阀体(ns):
更新({“a”:funcs_gen(k=2),“i”:5})
返回ns
newc=types.new\u class(“foo”,exec\u body=class\u body)
打印(newc().a(1))
#按预期打印8张
但是,如果我尝试对部分函数执行同样的操作,似乎会发生一些奇怪的事情:

导入类型
从functools导入部分
def fn(自身,a,k=1):
返回a+k+self.i
def级阀体(ns):
更新({“a”:部分(fn,k=2),“i”:5})
返回ns
newc=types.new\u class(“foo”,exec\u body=class\u body)
打印(newc().a(1))
#意外生成:`TypeError:fn()缺少1个必需的位置参数:“a”`
用于方法

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))
输出:

8

更改def fn(自身,a…->
def fn(a…
当然可以,但是在我的实际实现中,如果我想访问一些类数据,或者使用类方法,该怎么办?)SpartialMethod按预期工作。谢谢!因为
partial
对象没有实现描述符协议来将实例作为第一个参数绑定到自身。另外,请注意
types.new\u class
是一个非常方便的函数,您也可以直接使用
type
,它采用
type(名称、基、名称空间)