繁体   English   中英

填写清单python

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM