2016-05-19 6 views
0

get_random_items()関数をrandom_items属性に直接呼び出すことはできますか?これはPythonの悪い習慣と考えられますか?独自の属性でクラス関数を呼び出すことは悪い習慣と考えられますか?

class Items(object): 

    def __init__(self, tools, toys, food): 
     self.tools = tools 
     self.toys = toys 
     self.yellow = food 
     self.random_items = self.get_random_items([self.tools, self.toys, self.food]) 

    def get_random_items(self, item_list) 
     # do stuff to get random items.. 
     return random_items 

これは悪い習慣である場合には、何がrandom_itemsを提供するためのより良い方法だろうか?

+0

あなたがしようとしていることを説明してください。 –

+0

私は 'self.random_items'がプロパティだと思いましたか?そうでない場合、私は質問をリファクタリングするべきです。 – Rotareti

+0

'self.random_items'(単に関数の戻り値)が関数に置き換えられれば、OPが意味すると思います。 @ le0mはあなたが意味することですか? – Arc676

答えて

1

これは機能します。しかし、それを行うとrandom_itemsの値は__init__の間に1回だけ計算されます。 tools,toysまたはfoodの値は現在変更されていますが、常に古い値が得られます。

あなたはここにproperty

class Items(object): 

    def __init__(self, tools, toys, food): 
     self.tools = tools 
     self.toys = toys 
     self.yellow = food 

    @property 
    def random_items(self): 
     return self.get_random_items([self.tools, self.toys, self.food]) 

    def get_random_items(item_list) 
     # do stuff to get random items.. 
     return some_random_items 

を使用する必要がありますし、他の関数内の属性のようなrandom_itemsを使用することができます。

関連する問題