我在制作简单的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')