Pythonからkotlinに変換して、そのパッケージを使用してシステムを移行できるようにするパッケージがあります。kotlin、どのように基本クラスのコンストラクタにパラメータを渡すを簡単にするには?
パッケージ内には、すべてのバリアントまたは共通の基本クラスの「味」であるクラスのセットがあります。
コードのほとんどは、かなりの数のオプションパラメータを持つ基本クラスにあります。そう考える:
オープンクラスBaseTree(ヴァル・高さ:intは= 10、ヴァルルーツ:ブール=真、// ......その他たくさん!!
class FruitTree(val fruitSize, height:Int=10, roots:Boolean=true,
// now need all possible parameters for any possible instance
):BaseTree(height=height, roots=roots //... yet another variation of same list
コード、実際の木ではありませんこれは基本クラスと約10個のサブクラスに約20個のパラメータがあり、各サブクラスは基本クラスから同じ2つのバリエーションを実際に繰り返す必要があるということです。パラメータリストが変更された場合の本当の悪夢!
「20パラメータが多すぎます」とコメントしているかもしれないこれはのオプションパラメータであり、このデザインの側面に影響を与える言語機能です。 20個の必須パラメータが狂っているかもしれませんが、10個または20個のオプションのパラメータもあまり一般的ではありません。たとえば、sqlalchemy Tableをチェックしてください。
Pythonでは、あなたが持つことができ、基本クラスのコンストラクタを呼び出すには:
はdef __init__(self, special, *args, **kwargs):
super().__init(*args, **kwargs) # pass all parameters except special to base constructor
は、誰もが技術を知っています、別の方法を使用して、このパラメータリストの繰り返しを避けるために(おそらくインターフェイスまたは何かを使用していますか?)サブクラスごとに繰り返しますか?
私はsqlalchemyについて考えていた最初の人気のあるPythonパッケージを見てきました。そして、私が見た最初の主要なクラスであるTableクラスには、文字通り20個のオプションのパラメータがあります(これは必要なパラメータに加えて、 )。これはクラスデザインに問題があることを意味しますか?それはおそらくすべてのpython広く使用されているパッケージは、彼らのデザインに問題がありますか?私は、これが言語でオプションのパラメータを持つことに起因する違いだと思う。 Javaでは、オプションのパラメータがない場合は、20個のパラメータは指定できませんが、オプションの場合は災害になります。 – innov8