Python 自动将getter和setter应用于新对象变量
好的,假设我有一个非常简单的类,即:Python 自动将getter和setter应用于新对象变量,python,Python,好的,假设我有一个非常简单的类,即: class Test(object): pass 我想做的是定义一些默认的setter和getter方法 在创建时自动应用于新对象成员的。在下例中,a.x应始终为大写,即: a = Test() a.x = "foo" print a.x >>> FOO 如果我在类中创建x,我会得到如下行为: class Test(object): def __init__(self): self._x = ""
class Test(object):
pass
我想做的是定义一些默认的setter和getter方法
在创建时自动应用于新对象成员的。在下例中,a.x应始终为大写,即:
a = Test()
a.x = "foo"
print a.x
>>> FOO
如果我在类中创建x
,我会得到如下行为:
class Test(object):
def __init__(self):
self._x = ""
@property
def x(self):
return self._x
@x.setter(self, string):
self._x = string.upper()
那么,在不为每个成员定义setter和getter方法的情况下,有没有可能做到这一点呢??非常感谢
编辑:对于创建时间,我指的是a.x
的创建时间,而不是类实例的创建时间。子类dict
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class Struct(dict):
: """A dict subclass where you can simply use a dot to access attributes."""
:
: def __getattr__(self, name):
: return self[name]
:
: def __setattr__(self, name, value):
: self[name] = value
:--
In [2]: a = Struct()
In [3]: a.x = "foo"
In [4]: a.x
Out[4]: 'foo'
In [5]: a.length = 14
In [6]: a
Out[6]: {'length': 14, 'x': 'foo'}
dict的子类
In [1]: %cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:class Struct(dict):
: """A dict subclass where you can simply use a dot to access attributes."""
:
: def __getattr__(self, name):
: return self[name]
:
: def __setattr__(self, name, value):
: self[name] = value
:--
In [2]: a = Struct()
In [3]: a.x = "foo"
In [4]: a.x
Out[4]: 'foo'
In [5]: a.length = 14
In [6]: a
Out[6]: {'length': 14, 'x': 'foo'}
最简单的方法可能是重写
\uuuu setattr\uuuu
,并将任何字符串值更改为大写:
>>> class Test(object):
def __setattr__(self, attr, val):
if isinstance(val, basestring):
val = val.upper()
super(Test, self).__setattr__(attr, val)
>>> t = Test()
>>> t.x = 'foo'
>>> t.x
'FOO'
最简单的方法可能是重写
\uuuu setattr\uuuu
,并将任何字符串值更改为大写:
>>> class Test(object):
def __setattr__(self, attr, val):
if isinstance(val, basestring):
val = val.upper()
super(Test, self).__setattr__(attr, val)
>>> t = Test()
>>> t.x = 'foo'
>>> t.x
'FOO'
这听起来像是蟒蛇的一个用例 这只是一个大纲,我没有测试代码的工作 如果要将这种行为扩展到实例的每个属性,
即使是不存在的,你也应该考虑。 < P>这听起来像是Python的一个用例。 这只是一个大纲,我没有测试代码的工作 如果要将这种行为扩展到实例的每个属性,
即使是不存在的,你也应该考虑。我原来是这样的,然后我想我开始过度思考:它在创建时自动地应用到一个新的对象成员…所以我在想,如果在
\uuuu init\uuuuu
中初始化的类属性/或属性应该不包含在大写字母中…也许我有点不清楚,我指的是新成员的创建时间,即“a.x”,对不起。我原来有这个,然后我想我开始想得太多了:在创建时会自动应用到一个新的对象成员。。。所以我在想,如果在\uuuu init\uuuuu
中初始化的类属性/或属性应该不包含在大写字母中…也许我有点不清楚,我是指新成员的创建时间,即“a.x”,对不起。