42469


データに格納されているクラスごとに処理を分けたいです。今

[code]

    class Test():
        def test(self, user_code):
            (question, answer_code, type) = ans()
            if user_code == ans_code:
               return True
            else:
               return False
    
    class Array(Test):
        def ans(self):
    
            question = "TEST1"
            answer_code ="TEST1"
    
            return (question,answer_code,"Array")
    
    class For(Test):
        def ans(self):
    
            question = "TEST2"
            ans_code ="TEST2"
    
            return (question,ans_code,"For")
    
[/code]

のようにコードを書きました。user_dataのデータベースに  
question_id | user_id | ans | type  
1 1 TEST1 Array  
2 2 TEST3 For という風にデータが格納されています。  
このuser_dataのデータベースのtypeにArrayが入っているときは、class
Arrayのansメソッドを呼び出し、Forが入っているときはclass
Forのansメソッドを呼び出したいです。user_code引数にuser_dataのデータベースのansの中身が入っています。  
そのようにデータベースの内容と呼び出したいクラスを紐づけるには上記のコードにどう追加すれば良いでしょうか？  
コードを実行すると、ans()メソッドが定義されていないと出ます。


CC BY-SA 3.0
2018-03-18T08:20:11.387
42467
2018-03-18T09:29:17.390
27691
question
python
データに格納されているクラスごとに処理を分けたい


コードと説明を読んでもこれをどのように使うのか、何をやりたいのかはいまいちわかりませんので、とりあえずPythonの文法レベルでの回答となります。

ans() が見つからないのはそのような関数を定義していないからです。ans()メソッドを呼び出したいのでしたら、

[code]

    (question, answer_code, type) = ans()
    
[/code]

を以下のように修正してください。

[code]

    (question, answer_code, type) = self.ans()
    
[/code]

ついでに次の行で参照している ans_code という変数も未定義です。

[code]

    if user_code == ans_code:
    
[/code]

self.ans()の戻り値と比較したいのではないかとと想像されるので、もしそうであれば以下のように修正してください。

[code]

    if user_code == answer_code:
    
[/code]

以上、ご確認ください。


CC BY-SA 3.0
2018-03-18T09:29:17.390
42469
2018-03-18T09:29:17.390
27410
42467
answer