1 #!/usr/bin/env python 2 3 """ 4 Attribute-related functions. 5 6 Copyright (C) 2015, 2016 Paul Boddie <paul@boddie.org.uk> 7 8 This program is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free Software 10 Foundation; either version 3 of the License, or (at your option) any later 11 version. 12 13 This program is distributed in the hope that it will be useful, but WITHOUT 14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 15 FOR A PARTICULAR PURPOSE. See the GNU General Public License for more 16 details. 17 18 You should have received a copy of the GNU General Public License along with 19 this program. If not, see <http://www.gnu.org/licenses/>. 20 """ 21 22 from native import object_getattr 23 24 _default=object() # a unique placeholder for a missing value 25 26 def _getattr(obj, name, default=_default): 27 28 """ 29 Return for 'obj' the attribute having the given 'name', returning the given 30 'default' if the attribute is not defined for 'obj'. 31 """ 32 33 return object_getattr(obj, name, default) 34 35 def getattr(obj, name, default=_default): 36 37 """ 38 Return for 'obj' the attribute having the given 'name', returning the given 39 'default' if the attribute is not defined for 'obj', raising an exception if 40 'default' is not indicated and the attribute is not defined. 41 """ 42 43 result = _getattr(obj, name, default) 44 45 if result is _default: 46 if default is _default: 47 raise AttributeError(name) 48 else: 49 return default 50 else: 51 return result 52 53 def hasattr(obj, name): 54 55 "Return whether 'obj' has an attribute called 'name'." 56 57 result = _getattr(obj, name) 58 return result is not _default 59 60 def setattr(obj, name, value): pass 61 62 # vim: tabstop=4 expandtab shiftwidth=4