Establecer una propiedad dentro de un método Python
Quiero establecer un atributo de solo lectura dentro de un método de clase.
Ya he intentado esto:
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)))
pero es horrible. ¿Hay otra manera? Lo que necesito hacer es configurar la propiedad:
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
pero necesito hacerlo dentro de un método. ¿Hay otra manera
Gracias
rubik
PD. Ya he revisado esta publicación, pero no resuelve mi problema:Utilizando la propiedad Python () dentro de un método
EDIT: no puedo usarproperty
, porque quiero configurarlo dentro de un método. Puedo usarproperty
solo desde afuera:
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)
Y no puedo hacer eso porque no sé el nombre de la propiedad y tengo que configurarlo dinámicamente. Algo como esto
class Foo(object):
def __init__(self, v):
self._set_property_from_inside('v', v)
>>> f = Foo(42)
>>> f.v
42