summaryrefslogtreecommitdiff
path: root/pylint/test/functional/assigning_non_slot.py
diff options
context:
space:
mode:
Diffstat (limited to 'pylint/test/functional/assigning_non_slot.py')
-rw-r--r--pylint/test/functional/assigning_non_slot.py37
1 files changed, 35 insertions, 2 deletions
diff --git a/pylint/test/functional/assigning_non_slot.py b/pylint/test/functional/assigning_non_slot.py
index b80c32e..7163ac9 100644
--- a/pylint/test/functional/assigning_non_slot.py
+++ b/pylint/test/functional/assigning_non_slot.py
@@ -1,10 +1,10 @@
""" Checks assigning attributes not found in class slots
will trigger assigning-non-slot warning.
"""
-# pylint: disable=too-few-public-methods, no-init, missing-docstring, no-absolute-import
+# pylint: disable=too-few-public-methods, no-init, missing-docstring, no-absolute-import, import-error
from collections import deque
-__revision__ = 0
+from missing import Unknown
class Empty(object):
""" empty """
@@ -98,3 +98,36 @@ class UnicodeSlots(object):
def __init__(self):
self.first = 42
self.second = 24
+
+
+class DataDescriptor(object):
+ def __init__(self, name, default=''):
+ self.__name = name
+ self.__default = default
+
+ def __get__(self, inst, cls):
+ return getattr(inst, self.__name, self.__default)
+
+ def __set__(self, inst, value):
+ setattr(inst, self.__name, value)
+
+
+class NonDataDescriptor(object):
+ def __get__(self, inst, cls):
+ return 42
+
+
+class SlotsWithDescriptor(object):
+ __slots__ = ['_err']
+ data_descriptor = DataDescriptor('_err')
+ non_data_descriptor = NonDataDescriptor()
+ missing_descriptor = Unknown()
+
+
+def dont_emit_for_descriptors():
+ inst = SlotsWithDescriptor()
+ # This should not emit, because attr is
+ # a data descriptor
+ inst.data_descriptor = 'foo'
+ inst.non_data_descriptor = 'lala' # [assigning-non-slot]
+ return