Pythonのクラスのメソッドを辞書にまとめたい

[code]

    class test:
        def method1(self):
            print('1')
    
        def method2(self):
            print('2')
    
[/code]

というコードを、

[code]

    class test:
        methods = {}
    
        def method1(self):
            print('1')
        
        methods['m1'] = self.method1
    
        def method2(self):
            print('2')
    
        methods['m2'] = self.method2
    
[/code]

として、`x =
test()`に対して、`x.method1()`の代わりに`x.methods['m1']()`のようにkeyを指定してメソッドを実行できるようにしたいのですが、エラーが出てしまいます。（`NameError:
name 'self' is not defined`）

どのように変更すればよいでしょうか？




それを行って意味があるのか？とか、何か使い方に思わぬ制限がありそうな気がしますが、こんなパターンでの設定が考えられます。  
まだやり方はありそうですが、まずは一例として。

* * *

  * `__init__`メソッドで設定する

[code]

    class test:
        methods = {}
        
        def method1(self):
            print('1')
        
        def method2(self):
            print('2')
        
        def __init__(self):
            test.methods['m1'] = self.method1
            test.methods['m2'] = self.method2
    
    x = test()
    x.methods['m1']()
    x.methods['m2']()
    
[/code]

* * *

  * `__init__`メソッドで設定する、かつ`methods`もインスタンス変数とする

[code]

    class test:
        
        def method1(self):
            print('1')
        
        def method2(self):
            print('2')
        
        def __init__(self):
            self.methods = {}
            self.methods['m1'] = self.method1
            self.methods['m2'] = self.method2
    
    x = test()
    x.methods['m1']()
    x.methods['m2']()
    
[/code]

* * *

  * `self`は一切使わない

[code]

    class test:
        methods = {}
        
        def method1():
            print('1')
        
        methods['m1'] = method1
        
        def method2():
            print('2')
        
        methods['m2'] = method2
    
    x = test()
    x.methods['m1']()
    x.methods['m2']()
    
[/code]

* * *

  * 設定時には`self.`を使わない(=呼び出し時にインスタンスをselfとしてパラメータ指定する)

[code]

    class test:
        methods = {}
        
        def method1(self):
            print('1')
        
        methods['m1'] = method1
        
        def method2(self):
            print('2')
        
        methods['m2'] = method2
    
    x = test()
    x.methods['m1'](x)
    x.methods['m2'](x)
    
[/code]

