【发布时间】:2014-07-28 20:48:00
【问题描述】:
我有一长串 if 语句检查对象(自身)是否包含一系列可选属性。
举个例子:
if(hasattr(self, variableList)):
var1 = self.var1
if(hasattr(self, "var2")):
var2 = self.var2
if(hasattr(self, "var3")):
var3 = self.var3
if(hasAttr(self, "var4")):
var4 = self.var4
我试图弄清楚是否有一种使用 for 循环的简单方法,该方法将使用列表中的变量名来检查对象,以及它们是否存在以将它们本地存储在方法中,我认为这需要某种意义上的字典。尝试上述方法是不好的做法吗?有更明确的列表还是用类似的东西减少代码会更合适
for x in variableList:
if(hasattr(self,variableList[x]))
localvariable = variableList[x]
【问题讨论】:
-
应该是
hasattr而不是hasAttr? -
答案是肯定的,你可以在这里做点什么,但在你做之前,先看看nedbatchelder.com/blog/201112/…
-
我会将这些值存储在一个列表中。你想要做的有点奇怪。
-
你为什么要这个?为什么不直接使用属性呢?
-
@Xivilai:如果您尝试动态查找属性,它们可能不是对象的真正属性,而是字典的成员,因此您应该以这种方式使用它们。 (我说“可能”是因为在某些情况下,90% 的代码想要将它们视为静态属性,而另外 10% 的代码想要将它们视为动态属性,反之亦然;它们是非常罕见的情况,但它们确实存在。)
标签: python loops for-loop hasattr