That is the snag isn&#x27;t it. It&#x27;s really difficult to provide any meaningful &quot;reflection&quot; without having proper static types. So in your example you could say &quot;yes, because it gets a value when called&quot; or &quot;no, because it isn&#x27;t explicitly declared&quot;. Since python is dynamic, the &quot;hasattr&quot; method really just means &quot;does_invoking_this_attribute_return_something&quot;, which is very much not reflection.<p>It would maybe be useful with getting only the explicitly <i>defined</i> attributes (say e.g. if you wanted to convert an object to an xsd schema). Your __getattr__ based attribute would not show up in that list obviously.