Definindo uma propriedade dentro de um método Python
Eu quero definir um atributo somente leitura dentro de um método de classe.
Eu já tentei isso:
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)))
mas é horrível. Existe outro caminho? O que preciso fazer é definir a propriedade:
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
mas preciso fazer isso dentro de um método. Existe outro caminho?
Obrigado,
rubik
P.S. Eu já verifiquei este post, mas ele não resolve o meu problema:Usando a propriedade Python () dentro de um método
EDIT: Não consigo usarproperty
, porque eu quero defini-lo dentro de um método Eu posso usarproperty
somente de fora:
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)
E não posso fazer isso porque não sei o nome da propriedade e preciso defini-lo dinamicamente. Algo assim:
class Foo(object):
def __init__(self, v):
self._set_property_from_inside('v', v)
>>> f = Foo(42)
>>> f.v
42