2017-05-01 9 views
0

私は、select_image()という名前のクラス以外の関数からtextというNNクラス変数にアクセスしたいと思います。これはラベルとして表示する必要があります。可変テキストの場合、getTextはそれを呼び出すすべての人に利用可能にする必要がありますが、実装した方法では機能しません。どのようにして正しく行うことができますか?ただreturn self.textを使用getText(self)の身体に任意のヘルプPythonはクラスの外部から変数を取得します

class NN: 
    def __init__(self, ni, nh, no): 
     # number of input, hidden, and output nodes 
     self.ni = ni + 1 # +1 for bias node 
     self.nh = nh 
     self.no = no 

     #activations for nodes 
     self.ai = [1.0] * self.ni 
     self.ah = [1.0] * self.nh 
     self.ao = [1.0] * self.no 

     #create weights 
     self.wi = makeMatrix(self.ni, self.nh) 
     self.wo = makeMatrix(self.nh, self.no) 

     def test(self, patterns): 
     for p in patterns: 
      print(p[0], '->', self.update(p[0])) 
      a = self.update(p[0]) 
      b = a[0] 
      print(b) 

     ###############TEXT VARIABLE############ 
      if b >= 0.5: 
       text = "Melanoma" 
      else: 
       text = "Healthy" 
     return text 

    def getText(self): 

     self.text=text 
     return text 

def select_image(): 

    text = NN.getText() 
    print(text) 
    label7 = Label(root, text=text) 
    label7.pack(side="bottom", padx=10, pady=10) 
+0

ちょうど 'NN.text'を使用しています。問題は、 'text'は' getText'で定義されていないので、あなたは何が起こると思いますか分かりません。良いことは、Pythonでgetterとsetterを定義する必要がないということです。属性にアクセスするだけです。ですから、 'select_image'では' text = NN.text'が必要です。 –

+0

'self.text = text' ??? – alfasin

+0

コードを正しくインデントするように努力してください... – donkopotamus

答えて

1

ゲッター関数をまったく使用しないことをお勧めします。そして、テキスト変数を定義する際に、インスタンスとして変数self.textそれを定義する

if b >= 0.5: 
    self.text = "Melanoma" 
else: 
    self.text = "Healthy" 

ただし、あなたはクラスの内部機能でself.textを定義したので、あなたは、この関数を呼び出す前に試してみて、アクセスself.text場合は必要になりますエラー(AttributeError: 'NN' object has no attribute 'text')が表示されます。したがって、のinit関数内のすべてのインスタンス変数を常に初期化することをお勧めします。クラスの外からself.textにアクセスするには

class NN: 
    def __init__(self, ni, nh, no): 
     self.text = None 

    def test(self, patterns): 
     if b >= 0.5: 
      self.text = "Melanoma" 
     else: 
      self.text = "Healthy" 
     return self.text 

def select_image(): 
    # preferred way is to initialize the class instance 
    # and store it in a variable to access it anytime without 
    # having to initialize it again 
    nn = NN(ni, nh, no) 
    text = nn.text 
    print(text) 

    # the other way 
    text = NN(ni, nh, no).text 
    print(text) 
+0

NNは3つの引数を必要としますので、nn = NN()は私に__init __()がありません。3つの必須の位置引数 'ni'、 'nh'、および 'no'がありません。だから私は最初にそれを使用したくないし、ゲッターで試してみたのです。 – Dantuzzo

+0

@ダンツーゾはい、あなたはni、nh、noを渡すのを忘れました。 __init__関数でクラス引数を定義したとき。私はこれを私の答えに含めませんでした。それは単なる説明だったので、 –

+0

はそれを加えています:AttributeError: 'NN'オブジェクトには 'text'属性がありません – Dantuzzo

0

いただきありがとうございます。

+0

さらに、 'getText'メソッドを使用しないでください! –

関連する問題