属性允许属性访问

时间:2018-01-30 09:37:49

标签: python django

要使part of the django-tables2 API在模板中可用,我想在类上定义一个属性,该属性将属性名转换为另一个方法的参数。

目前的实施(模糊地)看起来像这样:

class Row(object):
    _cells = {'first_name': 'James', 'last_name': 'Charland'}

    def get_cell(self, name):
        return self._cells[name]

这使得无法从django模板访问特定单元格,因为django模板不允许将参数传递给函数。

我想支持像row.cell.first_name这样的内容,如果内部结构包含dict _cells,这将很容易。实际上,the implementation有点复杂(获取值涉及调用函数)。计算所有可能单元格的dict是不可取的,因为它可能涉及做不必要的工作。

我天真的解决方案如下:

class Row(object):
    _cells = {'first_name': 'James', 'last_name': 'Charland'}

    def get_cell(self, name):
        return self._cells[name]

    @property
    def cell(self):
        class CellReader(object):
            def __init__(self, row):
                self.row = row

            def __getattr__(self, name):
                return self.row.get_cell(name)

        return CellReader(self)

哪些有效,并且没有使用太多代码,但感觉有点冗长。标准库中是否有一些我没想到以更简洁的方式实现此功能的东西?

0 个答案:

没有答案