[问题] class method alias

楼主: amigcamel (阿吉amig)   2015-11-18 17:20:18
说实在我也不知道怎么样定这个标题
直接上code
应该会比较清楚
#这边我以redis-py作为范例,问题本身与redis毫无关系
import redis
class Redis:
def __init__(self):
self.conn = redis.StrictRedis()
# 这边我想要让self的method直接继承self.conn下面的所有methods
# (不知道用“继承”这个词对不对)
self.keys = self.conn.keys
self.hget = self.conn.hget
self.hgetall = self.conn.hgetall
self.delete = self.conn.delete
client = Redis()
于是乎
我今天如果要得到所以keys
我可以用
client.keys('*')
也就完全等于
client.conn.keys('*')
我可以手动在__init__里面
一个一个慢慢对应
但是这样就违反DRY的原则了
而且也很不聪明
这样作的目的只是想让code短一点
不知道这种技巧叫什么
作者: uranusjr (←這人是超級笨蛋)   2015-11-18 17:46:00
实作 __getattr__ 然后用 getattr(self.conn, name)参考 http://d.pr/19YDhhttp://d.pr/11fNI
作者: bibo9901 (function(){})()   2015-11-18 18:07:00
这样不算违反DRY啊? 只是code长一点而已不然也可以这样 http://tinyurl.com/o5cyvsk用__getattr__等于你所有attr都去self.conn找了, 那又何必新弄一个class

Links booklink

Contact Us: admin [ a t ] ucptt.com