1

我一直在开发一个测试框架(在 Selenium 和其他工具集之上,尽管这并不是特别相关),我决定让扩展框架变得更容易的组件之一将是一种简单的添加方法自动记忆的类成员(例如,从页面对象中提取的数据元素)。我想出的解决方案是一个重写的类,__getattr__()它可以用作每个需要自动记忆的类的父类。这个类的代码如下:

class SelfCachingGetters(object):

    def __getattr__(self, name):
        getter_string = '_get_%s' % name
        try:
            value = getattr(self, getter_string)()
            setattr(self, name, value)
        except AttributeError:
            raise AttributeError('%s is not a member of this class.' % name)
        return value

这个类使得在任何子类中创建自动记忆成员所需要做的就是声明一个方法_get_XXXX(),其中 XXXX 是您希望类成员拥有的名称。我喜欢这个,因为它为实现此功能提供了一种简单而干净的方式,例如,每个页面对象中没有数十个带有装饰器的方法。

我的问题是,这是实现此行为的最佳(最 Pythonic)方式吗?对我来说,这似乎很不合时宜。我正在研究元类和类装饰器。有没有人有任何其他建议?

4

0 回答 0