Re: [問題] 存取 class 內的變數

看板Python作者 (偶爾想擺爛一下)時間14年前 (2011/06/15 16:59), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《mail6543210 (mail6543210)》之銘言: : 假設class為: : class A(object): : def __init__(self): : self.__a='123' : self.__b='asd' : 在另一個程式中要怎麼存取這兩個變數? : 我知道可以用_A__a,_A__b,但我是想寫一個像是lxml.etree._Element.get()/.set() : 的方法, : .get(self,key)回傳是value : .set(self,key,value)回傳是None : 我想要寫出這種函式,輸入key(不含__)就可以存取value: : t=A() : t.set('a','678')#t._A__a='678' : t.get('b')#'asd' : 已知可用member function: : def set(self,key,val): : setattr(self,'_A__'+key,val) : 但有沒有辦法不用'_A__'改用self之類的?? 不清楚你這樣設計的目的是甚麼,猜測你是希望攔截每一個存取 private member 的 操作,那麼你可以考慮依需求為每一個 private member 提供 setter、getter or both,把 getter/setter 作成 property。 class A(object): def __init__(self): self.__a='123' self.__b='asd' def get_a(self): return self.__a def set_a(self, value): self.__a = value a = property(get_a, set_a) def get_b(self): return self.__b def set_b(self, value): self.__b = value b = property(get_b, set_b) or for Python 2.6+: class A(object): def __init__(self): self.__a='123' self.__b='asd' @property def a(self): return self.__a @a.setter def a(self, value): self.__a = value @property def b(self): return self.__b @b.setter def b(self, value): self.__b = value 設計成這樣後實際上就不需要你描述的 general getter/setter 的存在。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.20.39
文章代碼(AID): #1D-EKEK8 (Python)
討論串 (同標題文章)
文章代碼(AID): #1D-EKEK8 (Python)