代码之家  ›  专栏  ›  技术社区  ›  Ishan Srivastava

在python hook\u prepare中使用**kwargs__

  •  1
  • Ishan Srivastava  · 技术社区  · 6 年前

    我无法从python文档中理解kwargs是如何用于钩子的 __prepare__ 可以利用。

    metaclass(name, bases, namespace, **kwds) (此处传递的其他关键字与传递给的关键字相同 准备

    __准备__

    1 回复  |  直到 6 年前
        1
  •  3
  •   Blckknght    6 年前

    可以将关键字参数从 class

    关键字将传递给 __prepare__ , __new__ __init__ ,但是如果你只覆盖 __新建__ __初始化__ 也不是 会抱怨意外的额外争吵。

    class Meta(type):
        def __new__(cls, name, bases, namespace, **kwargs):
            print("Got keywords in __new__: {}".format(kwargs))
            return super().__new__(cls, name, bases, namespace)
    
        def __prepare__(name, bases, **kwargs):
            print("Got keywords in __prepare__: {}".format(kwargs))
            return {}
    
    class Klass(metaclass=Meta, key1=1, key2="fred"):                   # keywords used here!!!!
        pass
    

    你不需要使用 **kwargs 捕获参数的语法。如果愿意,可以显式地命名它们(尽管它们只能作为关键字传递,不能作为位置参数传递)。