"""attributes module"""
class Attribute:
"""A class attribute (non-data descriptor).
The class provides for an initial value and a docstring. This
replaces putting the information in the docstring of the class.
"""
def __init__(self, value, doc=""):
self.value = value
self.docstring = doc
def __get__(self, obj, cls):
return self
def __getattribute__(self, name):
if name == "__doc__":
return object.__getattribute__(self, "docstring")
return object.__getattribute__(self, value)
class AbstractAttribute:
"""An abstract class attribute.
Use this instead of an abstract property when you don't expect the
attribute to be implemented by a property.
"""
__isabstractmethod__ = True
def __init__(self, doc=""):
self.__doc__ = doc
def __get__(self, obj, cls):
return self