擅长:python、mysql、java
<p>我假设您已经考虑过<code>pickle</code>模块,它不适合您的目的。在这种情况下,可以将属性附加到类中,该属性指定每个属性的类型:</p>
<pre><code>class MyClass(object):
_types = {"isbn": ISBNNumber}
</code></pre>
<p>在重建时,迭代<code>_types</code>并尝试强制执行类型:</p>
^{pr2}$
<p>在上面的代码示例中,<code>obj</code>是正在重建的对象,我假设属性已经以字符串格式(或者从非序列化中获得的任何内容)分配。在</p>
<p>如果您希望它与无法更改源代码的第三方类一起使用,可以在从其他地方导入该类之后在运行时将<code>_types</code>属性附加到该类。例如:</p>
<pre><code>>>> from ConfigParser import ConfigParser
>>> cp = ConfigParser()
>>> cp._types
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: ConfigParser instance has no attribute '_types'
>>> ConfigParser._types = {"name": "whatever"}
>>> cp._types
{"name": "whatever"}
</code></pre>
<p>我也同意使用<code>__repr__</code>和{<cd6>},如果你能完全控制从你的输入文件中得到什么,那么使用<code>eval</code>会导致任意代码执行的可能性,这是相当危险的。在</p>