2017-04-18 20 views
0

私はPythonでコードを書いていましたが、疑問に悩まされました。無関係だが、乗り越えることはできない。ここでPythonモジュールの使用

import math 
print math.sqrt(9) 

は、私は(メソッドの平方根を持っていたクラスとして数学(モジュール)を参照してください):私は、モジュールをインポートすると、以下のようにそれを使用する場合のものです。そうであれば、どのようにしてオブジェクトを作成せずにクラスを直接使用できますか?基本的にクラスとオブジェクトの抽象概念を理解することはできません。

+0

モジュールはインポート時にインスタンス化されます。 –

答えて

1

モジュールは、クラスのようなものではなく、オブジェクトに似ています。モジュールを「インスタンス化」しないでください。各モジュールのインスタンスは1つしかなく、importステートメントを使用してアクセスできます。

具体的には、モジュールは、タイプ「モジュール」のオブジェクトである:

>>> import math 
>>> type(math) 
<type 'module'> 

各モジュールは、変数とメソッドの異なるセットを持ってしようとしています。

モジュールは、最初にインポートされるたびに、Pythonによってインスタンス化されます。インスタンス化されたモジュールはsys.modulesに格納されています。あなたはそれをインポートしたとき

>>> import sys 
>>> 'math' in sys.modules 
False 
>>> import math 
>>> 'math' in sys.modules 
True 
>>> sys.modules['math'] is math 
True 
+0

ありがとうございました。これは確かに役立ちます。 – Rohit

1

私の知る限り(数学や万人以上のような)全てのPythonモジュールがインスタンス化されています。彼らはあなたが何回インスタンス化したのですか?一度だけ!すべてのモジュールはシングルトンです。

ちょうど上記のステートメントは十分ではないので、それに深く潜んでみましょう。 は、次のように 『p.py』いくつかのコードを含むと言う(モジュールは基本的に「の.py」拡張子で終わるすべてのファイルです)Pythonモジュールを作成します。

In p.py 

print "Instantiating p.py module. Please wait..." 
# your good pythonic optimized functions, classes goes here 
print "Instantiating of p.py module is complete." 

とq.pyに

import p 
それをインポートしてみてください

、あなたが表示されますq.py実行したとき。..

Instantiating p.py module. Please wait... 
Instantiating of p.py module is complete. 

は今、あなたはそれのインスタンスを作成していますか?いいえ!しかし、まだあなたはそれを使い、使用準備ができています。

0

あなたの場合mathはクラスではありません。 import math全体のモジュールmathがインポートされます。ライブラリ(それのコンセプト)が含まれているように見えます。あなたは(すべてがあなたのプログラムに含まれていないために)全体のモジュールをインポートしないようにしたい場合は
は、あなたがこのような何かを行うことができます。

from math import sqrt 
print sqrt(9) 

のみsqrtからすべてを輸入していません。この方法mathモジュール。

0

math(module)は、方法がsqrt()のクラスとして表示されています。そうであれば、どのようにしてオブジェクトを作成せずにクラスを直接使用できますか?基本的にクラスとオブジェクトの抽象概念を理解することはできません。

モジュールをインポートすると、モジュールオブジェクトが作成されます。open('file.txt')と同じように、ファイルオブジェクトが作成されます。

あなたは、クラス名を参照することで、そこからオブジェクトを作成せずにクラスを使用することができます。

class A: 
    value = 2 + 2 
A.value 

クラスAをクラスを作成するために使用さ--theビルトインクラスクラスtypeの目的です。 Pythonのすべてがオブジェクトです。

オブジェクトを作成する方法のクラスA()を呼び出すと、 * importなどの文でオブジェクトを作成すると、defが関数オブジェクトを作成し、classは他のオブジェクトや他の多くのステートメントを作成するクラスオブジェクトを作成します。

関連する問題