I know that if I have a string, I can get its hash value by: str.hash
Is there any way to get the string value from a hash? (like: strHash.str)
Note that hash() function is not a one to one operation, but generally many objects have the same hash value. In a HashTable the hash values is generally used to guess a set of candidates, and the candidates are then compared each to the key to see if there is a real match.
hash() is generally a data reduction with loss -- for example long strings may be mapped to a 8 byte hash value. Long strings have more information, so different strings can have the same hash value.
There is the concept of "Perfect hash" -- but that is more for the static case, for example if you have a finite set of objects, then it may be possible to find a hash function that generates a unique hash for each object. But even in this case it should be hard to invert it, so going from hash back to object.
The main property of many hashing functions is that those are not trivially reversible.
This is way any proper login system compare hashes and does not compare plain-text passwords (unless you're called Vodafone or Facebook).
If you manage to reverse popular hash functions (beyond MD5) you can write a paper and be invited at all cryptography conferences.