擅长:python、mysql、java
<p>注意:在任何情况下,如果要从用户输入的输入中查找名称,请不要使用eval。例如,如果这来自一个网页,没有任何东西可以阻止任何人进入:</p>
<pre><code>__import__("os").system("Some nasty command like rm -rf /*")
</code></pre>
<p>作为论据。最好是限制到定义良好的查找位置,例如使用<a href="https://docs.python.org/2/library/functions.html#getattr" rel="noreferrer">getattr()</a>的字典或实例。例如,要查找self上的“post”值,请使用:</p>
<pre><code>varname = "post"
value = getattr(self, varname) # Gets self.post
</code></pre>
<p>类似地,要设置它,请使用setattr():</p>
<pre><code>value = setattr(self, varname, new_value)
</code></pre>
<p>要处理<a href="https://en.wikipedia.org/wiki/Fully_qualified_name" rel="noreferrer">fully qualified names</a>,比如“post.id”,可以使用下面的函数代替getattr()/<a href="https://docs.python.org/2/library/functions.html#setattr" rel="noreferrer">setattr()</a>。</p>
<pre><code>def getattr_qualified(obj, name):
for attr in name.split("."):
obj = getattr(obj, attr)
return obj
def setattr_qualified(obj, name, value):
parts = name.split(".")
for attr in parts[:-1]:
obj = getattr(obj, attr)
setattr(obj, parts[-1], value)
</code></pre>