-3
私は、次のやりたい
にクラスのインスタンスを渡す:私はクラスを持っている
、そのクラスはCMDSという名前の辞書を持っています。デコレータを介して要素を動的に追加したいデコレータは、このクラスのメソッドでなければなりません。私が欲しいもので
コード例:仕事にそのためにPythonはそのメソッド(関数)デコレータ
class Foo(object):
#In a class:
@cmd("exit")
def cmd_exit(self, *args):
self.run=0
print("Exiting mainloop...")
@cmd('reconnect')
def cmd_reconnect(self):
self.connect(self._host)
、私はデコレータある方法cmd
に自己を渡す必要があります。ただし、cmd
はself
を受け取りません。
どうすればいいですか?
EDIT:
マイFoo.cmd
方法は、次のような定義があります
def cmd(self, name):
def decorator(funcs):
fname=name if name else funcs.__name__
self.cmds[fname]=funcs
self.cmdLogger.info("Registrated function %s", name)
return
return decorator
をし、それが唯一の内側のデコレータことを私はデコレータに渡す文字列(例えば「出口」と「再接続」) 注意を受けます(デコレータ)はNone
を返します。したがって、デコレータが呼び出された元の関数は「削除」されています。
あなたの最初のコードブロックがあることを意図していると仮定すると、 'class Foo:'ブロックの中にネストされています(それを加えてください!): 'self'はまだ存在していないだけでなく、クラス自体もまだ存在しません。 'class'ブロックの最上位レベルでは、あなたはそのクラスが何を含むべきかを定義しています。もちろん、そのクラスのインスタンスを持つことはできません。 – Kevin
@Kevin ... oh @Đ#đ、それが問題でした。メソッドが定義されているときに、そのメソッドに対してメソッドを呼び出すことはできません。しかし、私は後でクラスの外で 'cmd_'関数を動かし、' Foo.cmd(name) 'を呼び出すことでそれを行うことができます。私はそれを見逃して本当に疲れているはずです。私はそれを受け入れることができるように答えを書くべきです。 – Sasszem