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

questionAnswers(4)

yourAnswerToTheQuestion