从一个对象层次结构中提取某些属性到另一个对象层次结构中的“Pythonic”方法是什么?

2024-05-19 01:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有这样的复杂类型:

class MyForm(wtforms.Form):
  firstname = wtforms.TextAreaField()
  lastname = wtforms.TextAreaField()

TextAreaField可以强制为包含HTML的str()。它有一个名为data的属性,其中包含原始数据。它还有一个名为label的属性,其中包含用于显示标签的HTML。我想从这个复杂类型中提取三个值。你知道吗

什么样的pythonic方法可以创建一个只包含我想要的属性的新对象?你知道吗

有点像。。。。你知道吗

f = MyForm()
... populate f ...
x = {}
for k, v in f:
  x[k] = {'html1': str(v), 'data': v.data, 'html2': v.label}

我知道那是错的,救命!你知道吗

稍后,我想说:

print x.firstname.data
print x.firstname.html1
print x.firstname.html2

Tags: form类型data属性htmlfirstnamelabelwtforms
1条回答
网友
1楼 · 发布于 2024-05-19 01:18:14

写一个适配器类怎么样?你知道吗

class TAFAdapter(object):
    def __init__(self, taf):
        self.taf = taf
    @property
    def data(self): return self.taf.data
    @property
    def html1(self): return str(self.taf)
    @property
    def html2(self): return self.taf.label

那么你要做的就是:

class MyForm(...):
    def __init__(self):
        self.firstname = TAFAdapter(wtforms.TextAreaField())
        ...

根据您的需要,您可以让TAFAdapter直接实例化TextAreaField,也可以将其泛化以用于其他表单字段。。。你知道吗

相关问题 更多 >

    热门问题