gpt4 book ai didi

python - 实现 python 元类来更改类级别变量

转载 作者:行者123 更新时间:2023-12-01 01:38:12 25 4
gpt4 key购买 nike

您能解释一下如何实现 AFactory 类来执行此操作吗?看来我需要使用元类,但是如何呢?我的所有尝试都因 KeyError

失败
dct = {
'key1': 'value1',
'key2': 'value2'
}

class AFactory:
pass

class A:
NAME = ''
VARIABLE = dct[NAME]

A1 = AFactory('key1')
a1 = A1()
assert a1.NAME == 'key1'
assert a1.VARIABLE == 'value1'

A2 = AFactory('key2')
a2 = A2()
assert a2.NAME == 'key2'
assert a2.VARIABLE == 'value2'

最佳答案

听起来你真的想要一个类工厂,而不是元类。 (是的,元类也是类工厂,但它们不是唯一的。)因此,最简单的解决方案是将 AFactory 定义为函数:

def AFactory(name):
class A:
NAME = name
VARIABLE = dct[NAME]

return A

如果你真的需要一个元类,你should implement an alternative constructor而不是尝试使元类可调用为 AFactory(name):

class AFactory(type):
@classmethod
def make(mcs, name):
clsname = 'A'
bases = ()
attrs = {
'NAME': name,
'VARIABLE': dct[name]
}

return mcs(clsname, bases, attrs)

然后你就可以使用它

A1 = AFactory.make('key1')

关于python - 实现 python 元类来更改类级别变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52184510/

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