python(関数ポインタとクラス関数ポインタ)
4794 ワード
【声明:著作権所有、転載歓迎、商業用途に使用しないでください.連絡ポスト:[email protected]】
関数ポインタとクラス関数ポインタはc言語の下にある概念が簡単で、スクリプトの下に使うのも便利です.スクリプト言語はすべてのタイプがオブジェクトであるため、ポインタの概念は存在しません.普通、私たちはこのように使っています.
この方法は一般的な関数に用いられても問題はない.でもクラス関数に使うとちょっと面倒ですが、
システムから与えられたアラート情報により、pythonはどのようにするかを示しています.肝心なのはclassインスタンスを定義し、このインスタンスに関数を加えてコールバック関数として使用すればいいのです.
コードからクラス関数は複雑ではないことがわかります.クラスインスタンスとクラス関数自体を関連付けるだけで、通常の関数のパラメータとして使用できます.
関数ポインタとクラス関数ポインタはc言語の下にある概念が簡単で、スクリプトの下に使うのも便利です.スクリプト言語はすべてのタイプがオブジェクトであるため、ポインタの概念は存在しません.普通、私たちはこのように使っています.
feixiaoxingdeMacBook-Pro-4:~ feixiaoxing$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:34)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def process(f):
... f(1,2,3)
...
>>> def add(a,b,c):
... print a,b,c
...
>>> process(add)
1 2 3
>>>
この方法は一般的な関数に用いられても問題はない.でもクラス関数に使うとちょっと面倒ですが、
feixiaoxingdeMacBook-Pro-4:~ feixiaoxing$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:34)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def process(f):
... f(1,2,3)
...
>>> class A:
... def run(self,a,b,c):
... print a,b,c
...
>>> process(A.run)
Traceback (most recent call last):
File "" , line 1, in
File "" , line 2, in process
TypeError: unbound method run() must be called with A instance as first argument (got int instance instead)
>>>
システムから与えられたアラート情報により、pythonはどのようにするかを示しています.肝心なのはclassインスタンスを定義し、このインスタンスに関数を加えてコールバック関数として使用すればいいのです.
feixiaoxingdeMacBook-Pro-4:~ feixiaoxing$ python
Python 2.7.13 (default, Dec 18 2016, 07:03:34)
[GCC 4.2.1 Compatible Apple LLVM 7.0.2 (clang-700.1.81)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> def process(f):
... f(1,2,3)
...
>>> class A:
... def run(self,a,b,c):
... print a,b,c
...
>>> val=A()
>>> process(val.run)
1 2 3
>>>
コードからクラス関数は複雑ではないことがわかります.クラスインスタンスとクラス関数自体を関連付けるだけで、通常の関数のパラメータとして使用できます.