Skip to main content
 首页 » 编程设计

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

2025年05月04日18webabcd

以下代码:

class Log: 
 
    BAT_STATS = ['AB', 'R', 'H', 'HR'] 
 
    def __init__(self, type): 
        for cat in Log.BAT_STATS: 
               self.cat = 0 

我希望那里的循环为 BAT_STATS 中的每个键创建一个类属性,这样我就可以:

log = Log() 
print log.HR; 

类似于 $this->$$foo = 'bar' 的 PHP,其中 $foo 将是 'HR'。

请您参考如下方法:

也许是这个?

class Log: 
    BAT_STATS = ['AB', 'R', 'H', 'HR'] 
 
    def __init__(self, type): 
        for cat in Log.BAT_STATS: 
            setattr(self, cat, 0) 

编辑 - 哎呀,缩进有点乱。

@EOL:您是否建议将其直接放入类定义中?虽然对于某些应用程序来说,只为类而不是每个实例设置一次这些值可能会很好,但我不确定你会怎么做。在类定义中,您没有“self”或“klass”变量来调用 setattr。在类定义的末尾,Python 将 locals 字典打包用作类的成员字典。你可以直接用 locals() 读取这个字典,但我认为你不能保证你可以写回它。我想获得这种效果的最简单方法是在创建类字典后对其进行修改,但这可能会非常困惑,因为这样一来,类的行为不再仅仅从其定义中就可以清楚了。这不一定是个坏主意,但如果没有更好地了解它的使用场景,我不想推荐它。