2016-10-14 24 views
0

私のコードでは少し複雑です。私は、他の2つの属性がいくつかの要因によって合計され、乗算されたときにある数よりも高い場合、海賊属性の値をTrueにします。以前に初期化された属性で初期化されるクラスインスタンス

例えば、social * 0.6 + fixedが5より大きい場合にのみ海賊属性をTrueにしたい場合は、そうでない場合はfalseを設定します。

あなたが fixedsocialのためのランダムな値を格納し、 pirateを生成し、比較のためにそれらを使用する必要が
import random 

class consumer(object): 
"""Initialize consumers""" 
    def __init__(self, fixed, social,pirate): 
     self.social = social 
     self.fixed = fixed 
     self.pirate = pirate 

"""Create an array of people""" 
for x in range(1,people): 
    consumerlist.append(consumer(random.uniform(0,10),random.uniform(0,10),True)) 
    pass 
+0

私は私が正しく理解してかどうかわからないんだけど、それは書き込みのと同じくらい簡単です: 'self.pirate = 0.6 *ソーシャル・+が固定> 5'と' __init__' –

+0

ノートから 'pirate'引数を削除します*消費者*の代わりに* Consumer *というクラス名には初期資本を使用することをお勧めします。 – Bouke

答えて

0

for x in range(1,people): 
    fixed = random.uniform(0,10) 
    social = random.uniform(0,10) 
    pirate = (social * 0.6 + fixed) > 5 # boolean 
    consumerlist.append(consumer(fixed, social, pirate)) 

あなたのために渡し冗長

+0

このソリューションも機能します。ソリューションの実装方法は、コードの残りの部分によって異なります。他の場所の '__init__'に' pirate'引数を必要としない場合は、それを削除して 'self.pirate'を' __init__'自体に設定するロジックを処理します。 –

1

ですモーゼスの答えに答えて:計算されたプロパティを使うことは、初期化時に海賊の値を計算するよりも安全です。 @property属性を持つメソッドをデコレートするときは、プロパティとして機能します(メソッドのように角括弧を使用する必要はありません)。後でソーシャルメンバーが変更されたときは常に最新です。

class Consumer(object): 

    def __init__(self, fixed, social): 
     self.fixed = fixed 
     self.social = social 

    @property 
    def pirate(self): 
     return self.social * 0.6 + self.fixed > 5 

consumer1 = Consumer(1, 12) 
print("Value of pirate attribute: " + str(consumer1.pirate)) 
関連する問題