gpt4 book ai didi

python 类属性

转载 作者:太空狗 更新时间:2023-10-29 18:30:50 25 4
gpt4 key购买 nike

我正在尝试找到扩展类变量的最佳方法。希望到目前为止我想出的方法的一个例子能够清楚地说明这一点。

class A(object):
foo = ['thing', 'another thing']

class B(A):
foo = A.foo + ['stuff', 'more stuff']

所以我试图让子类继承和扩展父类的变量。上面的方法有效,但似乎有点笨拙。我愿意接受任何建议,包括使用完全不同的方法完成类似的事情。

显然,如果需要,我可以继续使用这种方法,但如果有更好的方法,我想找到它。

最佳答案

可以使用元类:

class AutoExtendingFoo(type):

def __new__(cls, name, bases, attrs):
foo = []
for base in bases:
try:
foo.extend(getattr(base, 'foo'))
except AttributeError:
pass
try:
foo.extend(attrs.pop('foo_additions'))
except KeyError:
pass
attrs['foo'] = foo
return type.__new__(cls, name, bases, attrs)

class A(object):
__metaclass__ = AutoExtendingFoo
foo_additions = ['thing1', 'thing2']
# will have A.foo = ['thing1', 'thing2']

class B(A):
foo_additions = ['thing3', 'thing4']
# will have B.foo = ['thing1', 'thing2', 'thing3', 'thing4']

class C(A):
pass
# will have C.foo = ['thing1', 'thing2']

class D(B):
pass
# will have D.foo = ['thing1', 'thing2', 'thing3', 'thing4']

关于 python 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11675840/

25 4 0
文章推荐: python - 最好先按 keys_only=True 然后按 get_multi 查询还是只按完整查询?
文章推荐: python - 为什么 numpy.ravel 返回一个副本?
文章推荐: angular - 编写更清洁的 Promise 完成闭包
文章推荐: c# - List 内存开销