Python:使make_class类型错误:对象不支持项分配



我在制作简单的make_class时遇到了这个问题。这是我的代码:

def make_class(attrs, class_name, base=None):
def get(name):
if name in attrs:
return attrs[name]
elif base:
return base['get'](name)
def set(name, value):
attrs[name] = value
return cls

运行程序-

def make_user():
return make_class('Test', {'code': 0.202})

def make_user_class():
def init(self, owner):
self['set']('name', owner)
self['set']('number1', 0)
return make_class(Test, 'TUser', {'__init__': init, 'code': 0.03})

Test = make_user()
TAccount = make_user_class()
Test['get']('name')

我试图在def-set(name,value(:函数中设置值,但后来它显示

Traceback(最近调用last(:文件;"main.py";,第276行,inTest=make_user((File"main.py";,第265行,在make_user中return make_class('Account',{'interest':0.202}(文件"main.py";,第259行,在make_class中cls['set']('class_name',class_name(文件"main.py";,第232行,成套attrs[name]=value类型错误:"str"对象不支持项目分配

这是用于定义make_class:的签名

def make_class(attrs, class_name, base=None):

当您调用make_class时,位置参数需要按照正确的顺序:

def make_user():
return make_class({'code': 0.202}, 'Test')

def make_user_class():
def init(self, owner):
self['set']('name', owner)
self['set']('number1', 0)
return make_class({'__init__': init, 'code': 0.03}, 'TUser', Test)

请注意,让make_user_class引用预定义的全局Test可能不是一个好主意。make_user_class本身可能应该将所需的基类本身作为自变量:

def make_user_class(base):
def init(self, owner):
self['set']('name', owner)
self['set']('number1', 0)
return make_class({'__init__': init, 'code': 0.03}, 'TUser', base)

Test = make_user()
TAccount = make_user_class(Test)
Test['get']('name')

最新更新