2017-11-18 3 views
0

いくつかのJavaコードをPythonに相当するものに変換しようとしています。そのため、2つの間でインターフェースをとることができます。代わりに、それは可能に、Pythonは関数のオーバーロードを許可していません...以外デフォルトパラメータの割り当てでselfを使用できますか?

def to_array(self, order): 
    return self.to_array(order, self.length()) 
def to_array(self, order, length): 
    ... 

:次のようになります

public int[] toArray(boolean order) { 
    return toArray(order, this.length()); 
} 
public int[] toArray(boolean order, int length) { 
    ... 
} 

とPythonでの論理的同等:だから、Javaで私はいくつかのこのようなコードを持っています

def to_array(self, order, length = self.length()): 
    ... 

自己が本当に「は存在しませんので、しかし...これもおそらく、Pythonで許可されていません:デフォルトパラメータなので、再び、それはあなたがこのような何かをしたいと思うことを論理的と思われるため"までw関数の本体内にあります。

だから、これをPythonで行う正しい方法は何でしょうか?それともできないのですか?

編集:私は、私は、彼らがint[]

答えて

5

デフォルト値、テストに対するようNoneを使用することですこれを行うにはニシキヘビの方法を返すので、今の値を返すことになっている私のJavaコード内の空隙の機能を使用し実現それ:

def to_array(self, order, length=None): 
    if length is None: 
     length = self.length() 
+0

ありがとう、それは私が探しているようです。あなたがきれいに見えるコードを書くのを簡単にする言語としてそれ自体を宣伝するのが好きだと考えても、Pythonのようにはより洗練された方法があるようです。 – JDOdle

+0

@JDOdle *あなたが言っているように*関数の本体 "*、定義時にデフォルトのパラメータ値が設定されます。あなたがクラスの定義を完了していなくても、インスタンスは存在しません! Pythonは*可読性*を優先し、その一部は一貫した概念モデルです。 – jonrsharpe

+0

@JDOdle私はこれをかなりクリーンな方法で見つけました。 5つの異なるバージョンの関数に過負荷をかけたいのであれば、もっと退屈になるかもしれませんが、コンパイルされた言語があなたに与える優位性です。各プログラミング言語モデルには、いくつかの利点があります(認識された欠点)。 jonsharpeが言ったように、それは各言語がより重要と考えるものです。プライベートメソッドについても同様の議論があります(https://stackoverflow.com/a/7456865/2243104)。終わりには、あなたのコードに近づけてください。別の言語では意味がありません。 – Reti43

関連する問題