Python类接口设计

2024-04-24 22:37:53 发布

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

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

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)

我如何改进这个代码,使它不那么“难看”?在


Tags: 对象keynameselfapigetreturnvalue
1条回答
网友
1楼 · 发布于 2024-04-24 22:37:53

您应该能够使用类似的方法:

class B(object):
  def __getattribute__(self, method):
    try:
      return getattr(self, method)
    except:
      return getattr(self.get_connection(key), method)

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

对于完整性-__getattr__就足够了:

^{pr2}$

相关问题 更多 >