擅长:python、mysql、java
<p>我认为你的<code>__init__</code>基本上是好的,但是首先检查两个参数<em></p>
<p>一旦确定只传递了一个值,请根据它设置另一个值</p>
<pre><code>class ExampleClass:
def __init__(self, foo=None, bar=None):
if foo is not None and bar is not None:
raise ValueError("Please give a value for Foo or Bar (but not both)")
if foo is None:
self.bar = bar
self.foo = bar / 2.0
else:
self.foo = foo
self.bar = foo * 2.0
</code></pre>
<p>一个改进是提供特定的类方法来为单个值创建实例,并且不鼓励使用<code>ExampleClass.__new__</code>本身</p>
<pre><code>class ExampleClass:
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
@classmethod
def from_foo(cls, value):
return cls(foo=value, bar=value/2)
@classmethod
def from_bar(cls, value):
return cls(bar=value, foo=value*2)
</code></pre>