Mit*_*tar 6 python class-properties
我有一个库(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
Run Code Online (Sandbox Code Playgroud)
但它失败了:
'property' object is not iterable
Run Code Online (Sandbox Code Playgroud)
所以我想做一些事情:
class iterable_property(property):
def __iter__(self):
# What here?
Run Code Online (Sandbox Code Playgroud)
但我被困在这里.我怎么能得到一个也可以迭代的属性?
Ray*_*ger 10
您的原始代码看起来很好(虽然我不会将局部变量命名为与封闭函数相同的名称).
注意,属性仅适用于新式类,因此您需要从对象继承.此外,您需要从实例调用属性属性.
如果你需要一个class属性,那么属性将不起作用,你需要为类级属性编写自己的描述符:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4324 次 |
| 最近记录: |