擅长:python、mysql、java
<p>EDIT:(编辑,因为问题的主题已更改)<strong>我不建议在初始化时转换参数类型</strong>。例如:</p>
<pre><code>class PassPredictData:
def __init__(self, rating, name, lat, long, elev):
self.rating = int(rating)
self.name = str(name)
...
</code></pre>
<p>在我看来,这种隐式转换是危险的,原因不多。在</p>
<ol>
<li><strong>隐式地</strong>将参数类型转换为另一种类型而不发出警告是非常误导的</li>
<li>如果用户传入不需要的类型,则<strong>不会引发任何异常。这与隐式铸造密切相关。使用显式类型检查可以避免这种情况。在</li>
<li>静默转换类型<strong>违反了duck类型</strong></li>
</ol>
<p>与其转换参数类型,<strong>最好在初始化时检查参数类型。</strong>这种方法可以避免上述三个问题。为了实现这一点,您可以使用<a href="https://github.com/dobarkod/typedecorator/" rel="noreferrer">typedecorator</a>中的强类型检查,因为它<strong>简单</strong>而且非常可读</strong></p>
<p>对于Python2[编辑:根据操作请求将其作为参考]</p>
^{pr2}$
<p>对于Python3,可以使用<em>注释语法</em>:</p>
<pre><code>class PassPredictData1:
@typed
def __init__(self : object, rating : int, name : str, lat : float, long : float, elev : float):
self.rating = rating
setup_typecheck()
x = PassPredictData1(1, 5, 4, 9.8, 7.6)
</code></pre>
<p>引发错误:</p>
<blockquote>
<p>TypeError: argument name = 5 doesn't match signature str</p>
</blockquote>