[英]filling up a list python
感谢您关注我的帖子。 从这个社区标准来看,我想我可能会很简单地怀疑一个问题。 我正在尝试学习python。 所以无论如何..我有一个可以具有五个属性的对象。 所以可以这么说,当我初始化类时
class Foo:
def __init__ (self, argA = None, argB = None, argC = None, argD = None....)
在某个地方,我有一种称为获取功能的方法
def getFeatures(self):
x = [self._argA, self._argB, self._argc... and so on]
所以基本上我想将所有这些功能都放入列表中。 但这是问题所在。 在初始化期间,您可以看到所有参数都是可选的..但是当我执行getFeatures时,我只希望那些已初始化的功能。现在,一种简单的方法是编写一个很大的if语句,但正如Scott Myers在书中所写。每当您看到自己编写代码时,“如果对象属于A类型,如果对象属于B类型,则执行其他操作……然后拍击自己。.”这是一种获取特征的好方法,其中仅包含以下元素:初始化。 谢谢
def getFeatures(self):
return [field for field in (self._argA, ..., self._argE) if field is not None]
保留功能名称字典以启用/禁用布尔值。 这比所有这些变量都浮动要好得多。
def __init__(self, **kwargs):
self.features = kwargs
def getFeatures(self):
return {feature for feature, isEnabled in self.features.items() if isEnabled}
例:
>>> class Foo(object):
... def __init__(self, **kwargs):
... self.features = kwargs
...
... def getFeatures(self):
... return {feature for feature, isEnabled in self.features.items() if isEnabled}
...
>>> x = Foo(red=True, yellow=False, green=True)
>>> x.getFeatures()
set(['green', 'red'])
所有属性都可以在对象的__dict__
属性中作为字典找到(键->属性名,值->属性值)。 您可以通过列表理解和未初始化的属性来过滤未初始化的变量:
def get_initialized_attrs(self):
return [elem for elem in self.__dict__.values() if elem != None]
您可能还需要收集某种类型的属性,例如string( "str"
),integers( "int"
)等:
def get_initialized_attrs_bytype(self, type_name):
return [elem for elem in self.__dict__.values() \
if elem != None and type(elem).__name__ == type_name]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.