hasattr() vs. dir() vs. get_attribute_list()

 
hasattr( proxy, 'position') 
   is implemented calling getattr( proxy, 'position')
   this invokes overhead and may trigger exceptions

'position' in dir( proxy) 
  behaves more friendly but may overlook metaclass attributes: 

    >>> class Meta(type):
    ...     foo = 'bar'
    ... 
    >>> class Foo(metaclass=Meta):
    ...     pass
    ... 
    >>> hasattr(Foo, 'foo')
    True
    >>> 'foo' in dir(Foo)
    False

'position' in list( map( lambda x: x.lower(), proxy.get_attribute_list()))
'position' in list( map( str.lower, p.get_attribute_list())) 
  this seems to be a non-destructive solution for Tango-related applications