PythonにJavaリフレクションに相当するものはありますか?


ベストアンサー

JavaとC#では、リフレクションを使用すると、コードでクラスまたはインスタンスに問い合わせて、実行時にプロパティを取得できます。時間。彼らがPythonで使用する用語は、「イントロスペクション」です。詳細については、 Pythonイントロスペクションガイドを参照してください。

次のように実行できます:

#define a class

class Foo:

def bar(self):

return 123

#get the list of methodsmethodNames = filter(lambda x: not x.startswith("\_"), dir(foo.\_\_class\_\_))

#call the first method

getattr(foo, methodNames[0])()

ただし、Pythonは厳密に型指定されていないため、自己記述型の概念は実際にはありません。つまり、私たちが通常リフレクションを使用するもののいくつか(エンティティモデル、JsonConvertのようなカスタムシリアル化、いくつかのIoCパターン、および一般的なアスペクト指向のトリック)は、ひどくうまく翻訳されません。私が見たところ、Pythonイントロスペクションは主に自動生成されたヘルプ。

コーディング規則を使用して何かを行うことはできますが、コンパイラーは期待どおりのことを強制することはできません。 「ThinkingPython」は少し慣れが必要であり、厳密なタイプのバックグラウンドから来た場合、言語は少し不安なトレードオフを引き起こします。楽しみの一部は、コードのコーディングにより多くの時間を費やし、フレームワークのコーディングに費やす時間を減らすことができることです。慣れるのに少し時間がかかります。

回答

Python。

最初に別の言語を選択することを考えないでください。どうして?そうですね、

  • Pythonは簡単です。 これを信じてください。私の最初の主要言語はC ++で、転職を考えるようになりました。画面に「Helloworld」を表示するためのC ++コードの一部を次に示します-

#include

int main() {

std::cout << "Hello world!" << std::endl;

return 0;

}

Pythonでも同じです

print("Hello world!")

  • Pythonは動的に型指定されます。それはいったい何ですか?さて、コンピュータは馬鹿です。彼らは、1が数字、具体的には整数であり、「こんにちは」がコンピュータトークの単語または「文字列」であることを知るほど賢くはありません。そのため、一部のプログラミング言語では、使用するものの種類を指定する必要がありました。たとえば、Javaで2つの数値を追加する必要がある場合、次のことを行う必要があります-

class AddNums(){

public static void main(String args[]){

int first = 1;

int second = 2;

int sum = first + second;

System.out.println(sum);

}

}

その「int」キーワードが表示されますか?これは「整数」の略で、基本的にはコンピュータに次のように伝えます。「ねえ、この番号を格納するために何かが必要ですが、それが指定した番号であることがわからないので、変数を覚えておく必要があります。 「first」と呼ばれるものは、整数値のみを格納できます。値1を指定しました。以下同様に、「second」と「sum」を指定します。それがJavaの問題です。 Pythonでは?

first = 1

second = 2

sum = first + second

print(sum)

それがどれほどきれいかわかりますか?セミコロンがないことに注意してください。

  • Pythonはすべてのスタイルのプログラミングをサポートしています。さて、これは少し物議を醸すかもしれませんが、それでも言及する価値があります。大まかに言って、プログラミングには2つの方法(しゃれは意図されていません)があります。オブジェクト指向と手続き型です。詳細については説明しませんが、簡単に言えば、どちらも問題に取り組むための優れた方法ですが、オブジェクト指向は大規模なプロジェクトに適しているため、正しく実行すれば(それ自体が非常に重要です)、よりクリーンになります。 。手続き型は、小さなプロジェクトが物事を正しく実行するのに適しています。例-

class Hello{

public static void main(String args[]){

System.out.println("Hello world!");

}

}

vs

def main():

print("Hello world!")

main()

  • PythonとJavaの両方がOOP(オブジェクト指向プログラミング)をサポートするようになりましたが、Javaは他に何も提供しないことでOOPを強制します出口。それは、大企業や大規模プロジェクトにとっては良いことかもしれませんが、クラスが何であるかさえ知らない人にとっては大きな手間になる可能性があります。一方、Pythonを使用すると、独自のことができます。繰り返しますが、これは悪いことかもしれませんが、それはすべて、あなたが習得して従う慣行の種類に依存します。 Rubyは別の言語であり、非常に Pythonに似ていますが、コーダーに対してはるかに寛容であるため、あまり好きではありません。 Pythonは、その細かい線を維持します。しかし、はい、初心者の場合、オブジェクト指向は、2つの数値を取り込んでそれらの合計を出力するものを書くだけで、長い間、本当に長い実行すると、それは良いことかもしれません。
  • Pythonはほとんどどこでも使用されています。 ウェブ開発? 小切手。 ペネトレーションテスト? 小切手。 素晴らしいゲームを作る? 小切手。 Pythonでネイティブに記述されていないプロジェクトのグルーコード? 小切手。 機械学習? その男の子を再確認してください! 科学研究? 小切手。 学者? 小切手。 Androidアプリやその他のスケーラブルなプロジェクト…? Javaはあなたのものです。 ネイティブプログラミングはPythonが失敗する場所の1つです。

それだけだと思います。 どちらの言語も、それ自体が優れており、使用目的も優れていますが、Pythonは、初心者が今日から始めることができる最高のものの1つです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です