gpt4 book ai didi

python - 如何使用 `type()` 内置函数传递类关键字参数?

转载 作者:行者123 更新时间:2023-12-03 21:43:04 26 4
gpt4 key购买 nike

class语句采用各种功能的关键字参数。例如,__init_subclass__函数接收在类声明中传递的关键字参数:

class A(object):
def __init_subclass__(cls, **kwargs):
print(f'{kwargs=}')

class B(A, my_arg=5):
pass
kwargs={'my_arg': 5}
但是,这样做会阻止动态类创建: type函数好像没有走 class关键字参数。 A factory function does ,但可能与 __init_subclass__ 冲突当工厂必须修改类时或类似。
我想用 type()内置函数在其 3 参数版本中动态创建一个类。但是,似乎没有记录的方法来传递关键字参数(如上一个示例中的 my_arg)。
推荐的做法是什么?

最佳答案

裸机type不等同于 class Python3 中的语句。使用 types.new_class 作为 class 的功能等效项声明。

class B(A, my_arg=5):
a = 12 # non-trivial class body

B = types.new_class(
'B',
# base classes of `class` statement
bases=(A,),
# keywords to the `class` statement
kwds={'my_arg': 5},
# the class body as a function
exec_body=lambda body: body.update({'a': 12}),
)
请记住, class语句始终可以包装在函数中,以允许创建参数化的函数类。这也允许设置大多数特殊属性,例如类名通过 __qualname__ :
def make_b(my_arg, my_a, name=None):
class Parameterized_B(A, my_arg=my_arg):
a = my_a
if name is not None:
__qualname__ = name
return Parameterized_B

B = make_b(5, 12, "B")

关于python - 如何使用 `type()` 内置函数传递类关键字参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66222211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com