我想在类方法中设置只读属性。
我已经试过了:class Foo(object):
def __init__(self, v):
self._set('_v', v)
def _set(self, attr, v):
setattr(self, attr, v)
setattr(Foo, attr[1:], property(lambda self: getattr(self, attr)))
但这太可怕了。还有别的办法吗?我需要做的是设置属性:class Foo(object):
def __init__(self, v):
self._v = v
@ property
def v(self):
return self._v
>>> f = Foo(42)
>>> f.v
42
>>> f.v = 41
AttributeError: can't set attribute ## This is what I want: a read-only attribute
但我需要用一种方法。还有别的办法吗?
谢谢,
魔方
编辑:我不能使用property,因为我想在方法中设置它。我只能从外部使用property:class Foo(object):
def __init__(self, v):
self._v = v
@ property
def v(self):
return self._v
## ...OR
def getv(self):
return self._v
v = property(getv)
我不能这么做,因为我不知道属性名,我必须动态地设置它。像这样的:class Foo(object):
def __init__(self, v):
self._set_property_from_inside('v', v)
>>> f = Foo(42)
>>> f.v
42