%PDF- %PDF-
| Direktori : /usr/lib/python3/dist-packages/jaraco/classes/__pycache__/ |
| Current File : //usr/lib/python3/dist-packages/jaraco/classes/__pycache__/properties.cpython-312.pyc |
�
�2`� � �, � G d � d� Z G d� d� Zy)c � � e Zd ZdZd� Zdd�Zy)�NonDataPropertya Much like the property builtin, but only implements __get__,
making it a non-data property, and can be subsequently reset.
See http://users.rcn.com/python/download/Descriptor.htm for more
information.
>>> class X(object):
... @NonDataProperty
... def foo(self):
... return 3
>>> x = X()
>>> x.foo
3
>>> x.foo = 4
>>> x.foo
4
'...' below should be 'jaraco.classes' but for pytest-dev/pytest#3396
>>> X.foo
<....properties.NonDataProperty object at ...>
c �H � |�J d� �t |� sJ d� �|| _ y )Nzfget cannot be nonezfget must be callable)�callable�fget)�selfr s �;/usr/lib/python3/dist-packages/jaraco/classes/properties.py�__init__zNonDataProperty.__init__ s- � ���6�!6�6����~�6�6�6�~��� � Nc �, � |�| S | j |� S �N)r )r �obj�objtypes r �__get__zNonDataProperty.__get__ s � ��;��K��y�y��~�r
r )�__name__�
__module__�__qualname__�__doc__r r � r
r r r s � ��,�
r
r c �R � e Zd ZdZ G d� de� Zd
d�Zd
d�Zd� Zd� Z e
d � � Zy)�
classpropertya�
Like @property but applies at the class level.
>>> class X(metaclass=classproperty.Meta):
... val = None
... @classproperty
... def foo(cls):
... return cls.val
... @foo.setter
... def foo(cls, val):
... cls.val = val
>>> X.foo
>>> X.foo = 3
>>> X.foo
3
>>> x = X()
>>> x.foo
3
>>> X.foo = 4
>>> x.foo
4
Setting the property on an instance affects the class.
>>> x.foo = 5
>>> x.foo
5
>>> X.foo
5
>>> vars(x)
{}
>>> X().foo
5
Attempting to set an attribute where no setter was defined
results in an AttributeError:
>>> class GetOnly(metaclass=classproperty.Meta):
... @classproperty
... def foo(cls):
... return 'bar'
>>> GetOnly.foo = 3
Traceback (most recent call last):
...
AttributeError: can't set attribute
It is also possible to wrap a classmethod or staticmethod in
a classproperty.
>>> class Static(metaclass=classproperty.Meta):
... @classproperty
... @classmethod
... def foo(cls):
... return 'foo'
... @classproperty
... @staticmethod
... def bar():
... return 'bar'
>>> Static.foo
'foo'
>>> Static.bar
'bar'
*Legacy*
For compatibility, if the metaclass isn't specified, the
legacy behavior will be invoked.
>>> class X:
... val = None
... @classproperty
... def foo(cls):
... return cls.val
... @foo.setter
... def foo(cls, val):
... cls.val = val
>>> X.foo
>>> X.foo = 3
>>> X.foo
3
>>> x = X()
>>> x.foo
3
>>> X.foo = 4
>>> x.foo
4
Note, because the metaclass was not specified, setting
a value on an instance does not have the intended effect.
>>> x.foo = 5
>>> x.foo
5
>>> X.foo # should be 5
4
>>> vars(x) # should be empty
{'foo': 5}
>>> X().foo # should be 5
4
c � � � e Zd Z� fd�Z� xZS )�classproperty.Metac � �� | j j |d � }t |� t u r|j | |� S t
�| � ||� S r )�__dict__�get�typer �__set__�super�__setattr__)r �key�valuer
� __class__s �r r zclassproperty.Meta.__setattr__� sH �� ��-�-�#�#�C��.�C��C�y�M�)��{�{�4��/�/��7�&�s�E�2�2r
)r r r r �
__classcell__)r"