Pythonic方式编写具有随机行为的属性

时间:2017-05-12 03:01:38

标签: python oop

我正在写这样的代码

import random

class A:  
    def __init__(self):  
        self.att = self.set_att() 
    def set_att(self):
        x = random.randint(0,10)
        if x == 1:
            return "att1"
        elif x == 2:
            return "att2"
        # ... and so on

我的问题是:我应该这样做吗?或者有更好的pythonic方式来做到这一点。 我只想在init中调用set_att。 谢谢

pycharm说我应该使用@staticmethod,但我不明白是差异

1 个答案:

答案 0 :(得分:0)

以下是我能想到的一些尝试:

import random

POSSIBLE_ATT_VALUES = [f'att{x}' for x in range(1, 11)]


class A(object):
    def __init__(self):
        # One-time random value:
        self.att = random.choice(POSSIBLE_ATT_VALUES)


class B(object):
    @property
    def att(self):
        # Every access will return random value:
        return random.choice(POSSIBLE_ATT_VALUES)



>>> a = A()
>>> a.att
"att3"  # Possible value
>>> a.att
"att3"  # Will be same value
>>> b = B()
>>> b.att
"att5"  # Possible value
>>> b.att
"att1"  # Possibly different value