动态类变量名的pythonic方法(ala PHP的$$ var)

Wel*_*lls 1 python

以下代码:

class Log:

    BAT_STATS = ['AB', 'R', 'H', 'HR']

    def __init__(self, type):
        for cat in Log.BAT_STATS:
               self.cat = 0
Run Code Online (Sandbox Code Playgroud)

我希望循环在那里创建BAT_STATS中每个键的类属性,所以我可以去:

log = Log()
print log.HR;
Run Code Online (Sandbox Code Playgroud)

与PHP类似,$ this - > $$ foo ='bar',其中$ foo为'HR'.

Wee*_*ble 8

也许这个?

class Log:
    BAT_STATS = ['AB', 'R', 'H', 'HR']

    def __init__(self, type):
        for cat in Log.BAT_STATS:
            setattr(self, cat, 0)
Run Code Online (Sandbox Code Playgroud)

编辑 - 哎呀,缩进有点搞砸了.

@EOL:您是否建议将其直接纳入课程定义?虽然对于某些应用程序而言,为类而不是每个实例设置一次这些值可能会很好,但我不确定你是怎么做的.在类定义中,您没有"self"或"klass"变量来调用setattr.在类定义的最后,Python将locals字典分组以用作类的成员字典.您可以直接阅读此词典locals(),但我认为您无法保证可以回复此词典.我猜想获得效果的最简单方法是在创建类字典之后修改类字典,但这可能会让人感到困惑,因为通过查看它的定义,类的行为不再清晰.这不一定是个坏主意,但我不想在没有更好地理解它将要使用的场景的情况下推荐它.