Re: [問題] 存取 class 內的變數
※ 引述《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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):