Pythonにてコールバック関数を使うお試し（クラスからcallback関数を使う版のお試し）

以下を参照させていただき、

> [Pythonにてコールバック関数を使う](https://qiita.com/hatt0519/items/315cd25d3eaae3217103)

コールバック関数の使い方をわかったつもりだったが、
`事前にコールバック関数を登録し、後からそれを呼び出す`というやり方はどうやるんだろうと思って以下を試した

```python
# テスト用function                                                                                                                                                                                   
def function1():
    return 123

# classの定義                                                                                                                                                                                        
class HandlerClass:
    def __init__(self, name):
        self.name = name
        self.callback_function = None

    def register_callback_function(self, func):
        self.callback_function = func

    def call_callback_function(self):
        if self.callback_function == None:
            return None
        return self.callback_function()

# インスタンスを生成                                                                                                                                                                                 
HandlerClass = HandlerClass("Sample")
# 事前にコールバック関数を登録
HandlerClass.register_callback_function( function1 )
# 登録したコールバック関数を呼び出す
result1  = HandlerClass.call_callback_function()
print(result1)
```

実行

```
$ python test.py
123
```

できる事はできるが、これは正しい所作なのだろうか。。。
（引数を加えたい場合はどうするのが正しいのだろうか。。。）

### 追記

クラスのfunctionを、別クラスのcallback関数に指定して呼ぶことも可能ではある
（これは正しい所作なのだろうか。。。）

```python
# テスト用classの定義                                                                                                                                                                                
class TestClass:
    def __init__(self, name):
        self.name = name

    def function1(self):
        print(self.name)
        return 123

# classの定義                                                                                                                                                                                        
class HandlerClass:
    def __init__(self, name):
        self.name = name
        self.callback_function = None

    def register_callback_function(self, func):
        self.callback_function = func

    def call_callback_function(self):
        if self.callback_function == None:
            return None
        return self.callback_function()

# インスタンスを生成                                                                                                                                                                                 
TestClass = TestClass("TestClass")
HandlerClass = HandlerClass("HandlerClass")
# 事前にコールバック関数を登録                                                                                                                                                                       
HandlerClass.register_callback_function(TestClass.function1)
# 登録したコールバック関数を呼び出す                                                                                                                                                                 
result1  = HandlerClass.call_callback_function()
print(result1)
```

```
$ python test.py
TestClass
123
```

もちろんアドレスを一度dictに格納してから登録することも可能

```python
## アドレスを一度dictに格納してから登録することも可能
from collections import defaultdict
d = defaultdict(int)
# インスタンスを生成                                                                                                                                                                                 
d["class_addr"] = TestClass.function1
func = d["class_addr"]
# 事前にコールバック関数を登録                                                                                                                                                                       
HandlerClass.register_callback_function(func)
# 登録したコールバック関数を呼び出す                                                                                                                                                                 
result1  = HandlerClass.call_callback_function()
print(result1)
```

```
$ python test.py
TestClass
123
```

# 参考
[Pythonにてコールバック関数を使う](https://qiita.com/hatt0519/items/315cd25d3eaae3217103)