2013-06-25 29 views
14

私はPythonの初心者です。私は問題が何であるか理解できません。AttributeError: 'tuple'オブジェクトに属性がありません

def list_benefits(): 

     s1 = "More organized code" 
     s2 = "More readable code" 
     s3 = "Easier code reuse" 
     s4 = "Allowing programmers to share and connect code together" 
     return s1,s2,s3,s4 

def build_sentence(): 

     obj=list_benefits() 
     print obj.s1 + " is a benefit of functions!" 
     print obj.s2 + " is a benefit of functions!" 
     print obj.s3 + " is a benefit of functions!" 

print build_sentence() 

私は取得していますエラーは次のとおりです。

Traceback (most recent call last): 
    Line 15, in <module> 
    print build_sentence() 
    Line 11, in build_sentence 
    print obj.s1 + " is a benefit of functions!" 
AttributeError: 'tuple' object has no attribute 's1' 
+0

いいえ、その完璧な罰金はありません。ちょうど関数を呼び出し、その関数は残りの部分を返します。 – Gogo

+0

これはあなたがここに投稿したコードには関係ありません。他の何かが問題でなければなりません –

+0

コード全体が...あなたが望むならリンクをチェックしてください... [link](http://codepad.org/yQXHzIbE) – Gogo

答えて

11

4つの変数s1、s2、s3、s4を返し、単一の変数objを使用してそれらを暴露します。これはtupleと呼ばれ、objは4つの値に関連付けられ、値はs1,s2,s3,s4です。したがって、リストで使用するインデックスを使用して、必要な値を順番に取得します。

obj=list_benefits() 
print obj[0] + " is a benefit of functions!" 
print obj[1] + " is a benefit of functions!" 
print obj[2] + " is a benefit of functions!" 
print obj[3] + " is a benefit of functions!" 
6

あなたはtupleを返します。それをインデックス化する。

4

変数名はローカルで意味があります。

あなたがメソッドの最後に

return s1,s2,s3,s4

を打ったら、Pythonはインデックス0、1、2の4人のメンバーとしてS1、S2、S3、S4の値を持つタプルを構築し、 3 - 値に変数名の辞書ではなく、変数名とその値などを持つオブジェクトではない

メソッド内でreturnをクリックした後に変数名を意味したい場合は、辞書。

1
class list_benefits(object): 
    def __init__(self): 
     self.s1 = "More organized code" 
     self.s2 = "More readable code" 
     self.s3 = "Easier code reuse" 

def build_sentence(): 
     obj=list_benefits() 
     print obj.s1 + " is a benefit of functions!" 
     print obj.s2 + " is a benefit of functions!" 
     print obj.s3 + " is a benefit of functions!" 

print build_sentence() 

私はあなたがデフォルトコンストラクタを持つクラスを使用して、クラスのインスタンスを作成することができ、あなたはまだ、「属性」で呼び出したい場合は、おそらく他のいくつかの民族が に利益をもたらすことができ、それが後半に答えを知っています他の回答に記載されているように

関連する問題