Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python property setter only

Tags:

python

I have a class with property decorator.

class Dispatcher:
    def __init__(self, url):
        self._session = None

    @property
    def session(self):
        return self._session

    @session.setter
    def session(self, value):
        self._session = value

But I don't need the getter, can I have property with only the setter?

It's most more a curiosity.

like image 516
Rodrigo Avatar asked Mar 24 '26 21:03

Rodrigo


2 Answers

The simplest way IMHO is

class Dispatcher:
    def __init__(self, url):
        self._session = None

    def _set_session(self, value):
        self._session = value

    session = property(fset=_set_session)

Demo:

>>> d = Dispatcher('a')
>>> d.session = 1
>>> d._session
1
>>> d.session
Traceback (most recent call last):
  File "<pyshell#81>", line 1, in <module>
    d.session
AttributeError: unreadable attribute
like image 193
Serge Ballesta Avatar answered Mar 27 '26 10:03

Serge Ballesta


You could make your own "setterOnly" decorator:

# decorator
def setterOnly(f):
    return property(None,f)

usage:

class P:

    @setterOnly
    def x(self,v): print("setting x to:",v)


p = P()
p.x = 3

setting x to: 3

For your class:

class Dispatcher:
    def __init__(self, url):
        self._session = None

    @setterOnly
    def session(self,value):
        self._session = value
like image 31
Alain T. Avatar answered Mar 27 '26 10:03

Alain T.



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!