[問題] 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