2016-11-08 12 views
-1

クラス内のオプションからランダムなオブジェクトを選択しようとしていますが、属性エラーを受け取り続けると、特定のエラー以下のように:クラスからオブジェクトをランダムに選択しようとすると受信エラーが発生する

import random 

#creating male shirt class 
class MaleShirt(): 
    temp = "" 
    style = "" 

    def __init__(self, temp, style): 
     self.temp = temp 
     self.style = style 
     return None 

    #setters and getters 
    def setTemp(self, temp): 
     self.temp = temp 

    def getTemp(self): 
     return self.temp 

    def setStyle(self, style): 
     self.style = style 

    def getStyle(self): 
     return self.style 

    def explain(self): 
     print('Wear a', self.getStyle(), 'shirt when it is', self.getTemp(), 'outside') 

#classifying shirts 
maleshirt1 = MaleShirt('hot', 'boho') 
maleshirt2 = MaleShirt('cold', 'preppy') 
maleshirt3 = MaleShirt('hot', 'hipster') 

#randomly choosing shirt (where I get the error) 
choice = random.choice(MaleShirt.maleshirt1(), MaleShirt.maleshirt2(), MaleShirt.maleshirt3()) 
if choice == MaleShirt.maleshirt1(): 
    maleshirt1.explain() 
if choice == MaleShirt.maleshirt2(): 
    maleshirt2.explain() 
if choice == MaleShirt.maleshirt3(): 
    maleshirt3.explain() 

私はすべての時間を受け取る属性エラーが私に語った私は、私はこの問題を解決する方法を教えてください「タイプのオブジェクトのMaleShirt 'には属性 『maleshirt1』を持っていません」!

+0

クラスから作成するオブジェクトは、クラスの名前を使用してアクセスされません。あなたのオブジェクトを参照するときには、変数名 'maleshirt1'、' maleshirt2'などを使用してください。 – Polyov

答えて

0

車の各モデルが自分の工場を取得するふりをしましょう。そこで、トラック、セダン、バンの工場があります。工場は個々の車を作り、それをあなたに売る。トラックを運転したいときは、トラック工場に行かず、トラックがどこにあるのか聞いてください。あなたはトラックがどこにあるか知っているべきです。それはあなたの家の前にあります。

ここではオブジェクトとクラスで同じです。 MaleShirtクラスは車の工場です。それはMaleShirtオブジェクトになります。あなたはmaleshirt1maleshirt2、およびmaleshirt3という3つのMaleShirtオブジェクトを購入しました。工場を尋ねる代わりに、それらを使用したいときは、工場の位置とその名前を知る必要があります。その後、自分の名前でそれらを「使用」することができます:maleshirt1.explain()など

あなたがそれらのための工場(MaleShirt.maleshirt1())を頼むときの工場は、彼らが

タイプのオブジェクトのある場所、それは知りませんがわかりますMaleShirt 'には属性がありません。' maleshirt1 '

あなたに属しているためです。

0

私はあなたがオブジェクトのインスタンスを参照する方法について混乱していると思います。

maleshirt1 = MaleShirt('hot', 'boho') 

maleshirt1

MaleShirt.maleshirt1() 

インスタンスであり、クラス又はMaleShirtの静的メソッドでなければなりません。

オブジェクト自体が必要なもの、つまりmaleshirt1(および2と3)。
は、だからではなく、あなたはまた、文字列ではなくタプルを印刷するには、あなたのexplain方法をneatenことができ、この

choice = random.choice([maleshirt1, maleshirt2, maleshirt3]) 
if choice == maleshirt1: 
    maleshirt1.explain() 
elif choice == maleshirt2: 
    maleshirt2.explain() 
elif choice == maleshirt3: 
    maleshirt3.explain() 

を行います。

def explain(self): 
     print('Wear a %s shirt when it is %s outside' % (self.style, self.temp)) 

ifのステートメントは実際には必要ありません。 random.choiceから返されたどのよう

choice.explain() 

MaleShirtであるためexplain方法を有しています。

関連する問題