Pythonic way to delete variable from self if it exists in a list
我有一个字符串列表['foo1'、'foo2'、…]代表变量,如果变量是自身的一部分,我想从自身中删除它们。做这件事的方法是什么?
我的第一次尝试是
1 2 3 4 5 | if hasattr(self, 'foo1'): del self.foo1 if hasattr(self, 'foo2'): del self.foo2 ... |
但对于一个大的列表来说,这显然是不可扩展的。
有人能帮忙吗?
您可以使用
1 2 | for attr in ('foo1','foo2'): self.__dict__.pop(attr,None) |
号
您可以使用
1 2 3 | def safe_delattr(self, attrname): if hasattr(self, attrname): delattr(self, attrname) |
或者使用try/except块:
1 2 3 4 | try: delattr(self, attrname) except AttributeError: pass |
。
这样做的好处是,使用定义
你可以很容易地做到这一点,但我不得不说,乍一看这似乎是一个非常奇怪的要求。通常在Python中,任何涉及动态创建和/或删除变量的事情都是代码味道,所以我对需求是如何出现的(以及您的描述是否可能掩盖了真正的问题)感兴趣。
但是记住实例变量存储在
1 2 3 | for s in los: if s in self.__dict__: del self.__dict__[s] |
。
也许是这样?
1 2 3 | def del_attr(self, list): for l in list: delattr(self, l) |
有delattr(),尽管我想不出很多情况下删除对象的属性是有用的。
循环运行?
1 2 3 | var_names = ["foo1","foo2","foo3"] for var_name in var_names: delattr(self, var_name) |