答えて
Pythonには機能があります。すべてがオブジェクトなのでfunctions are objects too。
だから、あなたの例を使用する:私たちはdef
を使用する場合
>>> def whatever():
... pass
...
>>> whatever
<function whatever at 0x00AF5F30>
我々は機能であるオブジェクトを作成しました。私たちは、例えば、オブジェクトの属性を見ることができます:あなたの質問への答えで
>>> whatever.func_name
'whatever'
からwhatever()
file.py
の方法ではありません。グローバル名前空間file.py
にあるwhatever
という名前にバインドされた関数オブジェクトと考える方がよいでしょう。
>>> globals()
{'__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', '__d
oc__': None, 'whatever': <function whatever at 0x00AF5EB0>}
あるいはそれを別の方法を見て、まったく別のオブジェクトに名前whatever
を結合から私たちを止めるものは何もありません:
>>> whatever
<function whatever at 0x00AF5F30>
>>> whatever = "string"
>>> whatever
'string'
関数オブジェクトを作成するための他の方法があります。たとえば、:
>>> somelambda = lambda x: x * 2
>>> somelambda
<function <lambda> at 0x00AF5F30>
メソッドは、オブジェクトである関数のようなものです。それをメソッドにするのは、メソッドがオブジェクトにバインドされることです。これにより、オブジェクトは最初にself
と呼ばれる最初の引数として関数に渡されます。
のメソッドsomemethod
とインスタンスsomeobject
でクラスSomeClass
を定義してみましょう:
>>> class SomeClass:
... def somemethod(one="Not Passed", two="Not passed"):
... print "one = %s\ntwo = %s" % (one,two)
...
>>> someobject = SomeClass()
のは、属性としてsomemethod
を見てみましょう:
>>> SomeClass.somemethod
<unbound method SomeClass.somemethod>
>>> someobject.somemethod
<bound method SomeClass.somemethod of <__main__.SomeClass instance at 0x00AFE030
我々は、それがオブジェクトにバインドされたメソッドです見ることができますクラスのバインドされていないメソッドそれはsomemethod
で受信した最初の引数はオブジェクトであり、2番目の引数はメソッド呼び出しの最初の引数でバインドされた方法だとして
>>> someobject.somemethod("Hello world")
one = <__main__.SomeClass instance at 0x00AFE030>
two = Hello world
を:だから今のは、メソッドを呼び出して、何が起こるか見てみましょう。のは、クラスのメソッドを呼ぶことにしましょう:私たちはそれを適切な型のオブジェクトを与えることなくメソッドを呼び出ししようとしているので、
>>> SomeClass.somemethod("Hello world")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method somemethod() must be called with SomeClass instance as first argument (got str instance instead)
Pythonは文句を言います。だから我々は「手で」オブジェクトを渡すことによってこの問題を解決することができます
>>> SomeClass.somemethod(someobject,"Hello world")
one = <__main__.SomeClass instance at 0x00AFE030>
two = Hello world
あなたがこのタイプのメソッド呼び出しを使用する可能性があります - クラスのメソッドを呼び出す - あなたはスーパークラスから特定のメソッドを呼び出したいとき。
(それはtake a function and bind it to class to make it a methodすることが可能であるが、これはあなたが正常に今までに行う必要があるだろうものではありません。)
Hmm ...ファイルネームスペース内の通常の関数として "whatever"で作業できます。
file.py
という名前のファイルはPythonでJavaとは異なり、必ずしもあなたのようfile
と呼ばれるクラスが含まれていませんこれがfile.java
という名前のJavaファイルであると予想される可能性があります。
ファイルは、実際には名前空間(JavaクラスよりもJavaパッケージに似ています)であり、クラスではないモジュールです。 file
モジュール/名前空間がwhatever_func
名前通常の関数と方法whatever_meth
を持つクラスSomeClass
を含有する上記の例で
def whatever_func():
print "What ever function"
class SomeClass(object):
def whatever_meth(self):
print "What ever method"
:以下の例file.py
を考えます。
- 1. Python 3には 'foreach'関数がありますか?
- 2. MATLABにはPythonの範囲関数がありますか?
- 3. python ftp storbinary関数に戻り値がありますか?
- 4. PHPのようにPythonに 'imagecreatefromjpeg'関数がありますか?
- 5. Pythonの標準ライブラリにループ関数に似た関数がありますか?
- 6. Pythonには分数を減らす関数がありますか?
- 7. Pythonの関数とリストはどこにある必要がありますか?
- 8. memoized python関数のキャッシュはどこにありますか?
- 9. このPython関数はどのパッケージにありますか?
- 10. Rにget_map関数と同等のPythonはありますか?
- 11. Django/Pythonにdump()関数はありますか?
- 12. "data_files"ルートディレクトリを取得するPython関数はありますか?
- 13. Pythonのいくつかの数学関数の前にfがあります
- 14. Pythonでは、関数を呼び出す前に関数が "ジェネレータ関数"であるかどうかをチェックする方法はありますか?
- 15. C#にはすでにConditional Zip関数がありますか?
- 16. C++関数mainにはすでにボディがありますか?
- 17. on_exit()関数とatexit()関数に違いはありますか?
- 18. 私のPythonコードに何か問題がありますか? (関数)
- 19. Pythonにはas.Date()がありますか?
- 20. 関数エラーまたはパラメータにエラーがありますか?
- 21. Pythonにはモジュールがありますが、C++には何がありますか?
- 22. Ember.js .then関数には常にコールバックがありますか?
- 23. Pythonでランダムパッケージにrandint関数をシードする必要がありますか?
- 24. Pythonの関数を理解する必要があります
- 25. findArray()関数にエラーがあります
- 26. PythonにはEXIT_SUCCESS定数がありますか?
- 27. Python Pandas to_csvには最大行数がありますか?
- 28. Pythonに `and`や` or`の組み込み関数版がありますか?
- 29. なぜこのPython関数に2回のリターンがありますか?
- 30. Pythonに「mscohere」というMATLAB関数のアナログがありますか?
と私は機能と方法がお互いに同義であると考えました。 – Amarghosh
@Amarghosh:いいえ。メソッドはクラスにバインドされた記述子です。 – nosklo
用語は私が信じる言語の間で異なります - すべてが静的またはインスタンスのメソッドです。 – Amarghosh