我正在学习Python 3中的元编程。我的教授给了我们这个练习:
编写名为Spell的元类,将Student的实例转换为Wizard。
我完成了以下代码:
class Spell(type):
def __new__(cls, classname, supers, cls_dict):
cls_dict['__init__'] = Spell.toWizard()
cls_dict['__qualname__'] = 'wizard'
return type.__new__(cls, 'wizard', supers, cls_dict)
@staticmethod
def toWizard():
def init(*args):
wizard(args, 'fire_spell')
return init
class student(metaclass=Spell):
def __init__(self, name):
self.name = name
class person():
def __init__(self, name):
self.name = name
class wizard(person):
def __init__(self, name, magic):
self.magic = magic
super().__init__(name)
if __name__ == '__main__':
s = student('name1')
print(s.__dict__)
s = student('name2')
print(s.__dict__)
在我的代码中,巫师类的__init__
正确调用,而不是学生类的__init__
,但是创建的对象具有空的__dict__
。我做错了什么?