2017-01-07 18 views
1

辞書内にクラスで作成された関数を配置しようとしていますが、 'egg'という名前のエラーが引き続き発生しています。どちらか辞書内のクラス内の関数

{'eggs':eggs()} 
{'eggs':spam.eggs} 
{'eggs':spam.eggs()} 

できる人:これは私がこれまで試してみました何で、

class spam(object): 
    def __init__(self,my_dict={'eggs',eggs}): 
     self.my_dict=my_dict 
    def eggs(self): 
     print('eggs') 

はまた、私はまたしてその辞書を交換しようとしているクラスの外

class spam(object): 
    def __init__(self,my_dict): 
     self.my_dict=my_dict 
    def eggs(self): 
     print('eggs') 

my_dict={'eggs':eggs} 

を使用して試してみましたこの辞書を作成する方法や、文字列入力に基づいてこの関数を呼び出す別の方法を教えてください。

+1

正確には何ですか? '__int__'はあなたが' __init__'ではなくあなたの名前です。それでも関数を保持する辞書を作成するのはなぜですか?これは、クラスが本質的に行うことです、彼らはこの情報を保持する '__dict__'を持っています。 –

+0

それは間違いでした、私は実際のコードで__init__を使用しました –

答えて

1

この機能にアクセスするには、クラスのインスタンスを作成する必要があります。あなたは

{'eggs': spam().eggs} 

あなたは月と同様、クラスのインスタンスなしでそれにアクセスすることはできませんので、eggsは、非静的クラスメソッドで、クラスの外

{'eggs':spam().eggs} 
+0

それは問題の解決ではありません。 NameErrorは解決されません。 –

+0

@NiklasR、Python 3.6でこれを実行すると 'NameError'が発生しません – ForceBru

+0

OPがこの変数を' def __init __(self、my_dict = eggs) 'のデフォルト値として使用しようとしたときに' NameError'を返します ' –

1

:あなたはクラスの外でこれを行うことができますあなたがしたいのであれば{'eggs': spam.eggs}ようなものが働くだろう

@staticmethod 
def eggs(): 
    print('eggs') 

を使用して、静的-INGのことを考えてみましょう。

+0

@ Jean-FrançoisFabreありがとう。固定 – Uriel

+0

私はそれがPython 3.5または3.6からのみ動作すると思います。まだ 'NameError:name 'spam'が定義されていません。 –

+0

いいえ、あなたは正しいです。それは3.5で失敗しました。メソッドの作成の順序 – Uriel

1

__init__()の内部に辞書を作成します。

class spam(object): 
    def __init__(self, my_dict=None): 
    if my_dict is None: 
     my_dict = {'eggs': self.eggs} 
    self.my_dict = my_dict 

あなたが(両方ともわずかに異なる意味を持つ)spam.eggsまたはtype(self).eggsを使用して、元のメソッドではなくバインドされたインスタンスメソッドを保存したい場合。

関連する問題