首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python类接口设计

Python类接口设计
EN

Stack Overflow用户
提问于 2014-09-17 15:02:12
回答 1查看 211关注 0票数 1

有没有一种方法可以轻松地公开python类内部对象的APi而不重新键入该对象的每个API?例如,我编写了一个redis复制类,我的所有函数如下

代码语言:javascript
复制
def get_connection(self, name):
    ........
    host, conn = self.colo_rings[name]
    return conn

def hgetall(self, name):
    return self.get_connection(name).hgetall(name)

def hset(self, name, key, value):
    return self.get_connection(name).hset(name, key, value)

def hsetnx(self, name, key, value):
    return self.get_connection(name).hsetnx(name, key, value)

def hdel(self, name, *key, colo=None):
    return self.get_connection(name).hdel(name, *key)

我如何改进这段代码,使它不那么“丑陋”呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-17 15:40:48

您应该能够使用类似于此的内容:

代码语言:javascript
复制
class B(object):
  def __getattribute__(self, method):
    try:
      return getattr(self, method)
    except:
      return getattr(self.get_connection(key), method)

这里的优点是,通过在类中定义连接,仍然可以使用连接上不存在的方法,但是在尝试通过myB.hgetall()访问连接时,将使用未定义和存在于连接上的任何方法(例如)。

为了完整性- __getattr__就足够了:

代码语言:javascript
复制
class B(object):
  def __getattr__(self, method):
    return getattr(self.get_connection(key), method)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25894092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档