%PDF- %PDF-
Direktori : /lib/python3/dist-packages/jaraco/classes/__pycache__/ |
Current File : //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"