作者sbrhsieh (偶尔想摆烂一下)
看板Python
标题Re: [问题] 存取 class 内的变数
时间Thu Jun 16 00:59:54 2011
※ 引述《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