Module ocd.types
Custom types.
Expand source code
"""Custom types.
"""
__author__ = 'Md Jahidul Hamid <jahidulhamid@yahoo.com>'
__copyright__ = 'Copyright © Md Jahidul Hamid <https://github.com/neurobin/>'
__license__ = '[BSD](http://www.opensource.org/licenses/bsd-license.php)'
__version__ = '0.0.2'
class SingletonMeta(type):
"""A metaclass to make singleton classes that can have only one
instance.
"""
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
cls._instances[cls] = super(SingletonMeta, cls).__call__(*args,
**kwargs)
return cls._instances[cls]
class VoidType(object, metaclass=SingletonMeta):
"""A custom type that represents false.
For instances of this class, `len()` returns `0`, items and
attributes can not be set.
It's mainly used inside the containing package for null or
non-existent value. `None` is a python object that is commonly used
and should be retained its meaning as a valid value to a variable
while we use `Void` internally to represent variables without any
valid value.
Thus, an object with `Void` value should be treated as an object
with non-existent value.
"""
def __new__(cls):
return Void
def __reduce__(self):
return (VoidType, ())
def __copy__(self):
return Void
def __deepcopy__(self, memo):
return Void
def __call__(self, default):
pass
def __bool__(self):
return False
def __len__(self):
return 0
def __setitem__(self, key, value):
raise NotImplementedError(self.__class__.__name__
+ " does not support setting items")
def __setattr__(self, key, value):
raise NotImplementedError(self.__class__.__name__
+ " does not support setting attributes")
# this one needs to be defined here.
Void = object.__new__(VoidType)
'''Used internally to represent non-existent value, thus `None` retains its usual meaning.'''
Global variables
var Void
-
Used internally to represent non-existent value, thus
None
retains its usual meaning.
Classes
class SingletonMeta (...)
-
A metaclass to make singleton classes that can have only one instance.
Expand source code
class SingletonMeta(type): """A metaclass to make singleton classes that can have only one instance. """ _instances = {} def __call__(cls, *args, **kwargs): if cls not in cls._instances: cls._instances[cls] = super(SingletonMeta, cls).__call__(*args, **kwargs) return cls._instances[cls]
Ancestors
- builtins.type
class VoidType (*args, **kwargs)
-
A custom type that represents false.
For instances of this class,
len()
returns0
, items and attributes can not be set.It's mainly used inside the containing package for null or non-existent value.
None
is a python object that is commonly used and should be retained its meaning as a valid value to a variable while we useVoid
internally to represent variables without any valid value.Thus, an object with
Void
value should be treated as an object with non-existent value.Expand source code
class VoidType(object, metaclass=SingletonMeta): """A custom type that represents false. For instances of this class, `len()` returns `0`, items and attributes can not be set. It's mainly used inside the containing package for null or non-existent value. `None` is a python object that is commonly used and should be retained its meaning as a valid value to a variable while we use `Void` internally to represent variables without any valid value. Thus, an object with `Void` value should be treated as an object with non-existent value. """ def __new__(cls): return Void def __reduce__(self): return (VoidType, ()) def __copy__(self): return Void def __deepcopy__(self, memo): return Void def __call__(self, default): pass def __bool__(self): return False def __len__(self): return 0 def __setitem__(self, key, value): raise NotImplementedError(self.__class__.__name__ + " does not support setting items") def __setattr__(self, key, value): raise NotImplementedError(self.__class__.__name__ + " does not support setting attributes")