Message258168
Based on the data-model documentation (https://docs.python.org/2/reference/datamodel.html#invoking-descriptors) and the dotted lookup behavior, the follow definitions are correct:
"If the descriptor defines __set__() and/or __delete__(), it is a data descriptor; if it defines neither, it is a non-data descriptor."
def has_data_descriptor_attrs(obj):
return set(['__set__', '__delete__']) & set(dir(obj))
def is_data_descriptor(obj):
return bool(has_data_descriptor_attrs(obj))
However, the inspect module has the following, which is also reflected in the descriptor how-to (https://docs.python.org/2/howto/descriptor.html#descriptor-protocol):
"If an object defines both __get__() and __set__(), it is considered a data descriptor."
def isdatadescriptor(object):
"""Return true if the object is a data descriptor.
Data descriptors have both a __get__ and a __set__ attribute..."""
if isclass(object) or ismethod(object) or isfunction(object):
# mutual exclusion
return False
tp = type(object)
return hasattr(tp, "__set__") and hasattr(tp, "__get__")
I'm willing to sign a contributor release and fix myself. |
|
Date |
User |
Action |
Args |
2016-01-13 20:56:52 | Aaron Hall | set | recipients:
+ Aaron Hall |
2016-01-13 20:56:52 | Aaron Hall | set | messageid: <1452718612.1.0.925403449689.issue26103@psf.upfronthosting.co.za> |
2016-01-13 20:56:52 | Aaron Hall | link | issue26103 messages |
2016-01-13 20:56:51 | Aaron Hall | create | |
|