gpt4 book ai didi

python - 可迭代属性

转载 作者:太空狗 更新时间:2023-10-29 22:16:47 25 4
gpt4 key购买 nike

我有一个库(django-piston),它期望类的一些参数作为类属性。我想在一个方法中动态定义这个值。所以我想做类似的事情:

class MyHandler(BaseHandler):
@property
def fields(self):
fields = self.model._meta.fields + self.model._meta.virtual_fields
# Do something more with fields
return fields

但它失败了:

'property' object is not iterable

所以我想做这样的事情:

class iterable_property(property):
def __iter__(self):
# What here?

但是我卡在这里了。我怎样才能获得也可以迭代的属性?

最佳答案

您的原始代码看起来不错(尽管我不会将局部变量命名为与封闭函数相同的名称)。

请注意,属性仅适用于新式类,因此您需要从object 继承。此外,您需要从实例中调用 property 属性。

如果您需要类属性,那么property 将不起作用,您需要为类级属性编写自己的描述符:

class ClassProperty(object):
def __init__(self, func):
self.func = func
def __get__(self, inst, cls):
return self.func(cls)

class A(object):
model_fields = ['field1', 'field2', 'field3']

@ClassProperty
def fields(cls):
return cls.model_fields + ['extra_field']

print A.fields

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

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