小编Dar*_*ban的帖子

在Python 3中使用元类重新定义__init__

我正在学习python 3中的元编程.我的教授确实给了我们这个练习:

编写元类法术,用于在向导中转换学生的实例.

我这样做了:

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__)
Run Code Online (Sandbox Code Playgroud)

__init__正确调用向导类而不是学生类__init__,但创建的对象为空__dict__.我哪里错了?

python metaclass

4
推荐指数
1
解决办法
310
查看次数

标签 统计

metaclass ×1

python ×1