填充列表python

2024-09-29 23:27:41 发布

您现在位置:Python中文网/ 问答频道 /正文

谢谢你查我的帖子。我想我有一个很简单的疑问。。但如果太简单了,请原谅我。我正在努力学习python。 总之。。我有一个可以有五个属性的对象。 所以假设当我初始化类时,它是这样的

class Foo:
    def __init__ (self, argA = None, argB = None, argC = None, argD = None....)

在某个地方我有一个叫做获取特征的方法

^{pr2}$

所以基本上我要把所有这些特性都列在一个列表中。 但问题是。 在初始化过程中,如您所见,所有参数都是可选的。。 但是当我得到特性时,我只需要那些初始化过的特性 现在一个天真的方法是写一个大的if-else语句,但是正如Scott Myers在is book中所写的那样。。每当你看到自己在写一个代码“如果对象是a类型,做一些事情,如果对象是类型B,做其他事情。。。那就给自己一巴掌……” 获取只包含初始化的元素的特性的好方法是什么。 谢谢


Tags: 对象方法selfnone类型属性fooinit
3条回答

所有属性都可以作为字典在对象的__dict__属性中找到(键->属性名称,值->属性值)。您可以通过列表理解和筛选未初始化的属性来筛选未初始化的变量:

def get_initialized_attrs(self):
     return [elem for elem in self.__dict__.values() if elem != None]

您可能还希望收集具有特定类型的属性,例如字符串("str")、整数("int")等:

^{pr2}$

将功能名称词典保持为布尔启用/禁用。这比让所有这些变量浮动要好得多。在

def __init__(self, **kwargs):
    self.features = kwargs

def getFeatures(self):
    return {feature for feature, isEnabled in self.features.items() if isEnabled}

示例:

^{pr2}$
def getFeatures(self):
    return [field for field in (self._argA, ..., self._argE) if field is not None]

相关问题 更多 >

    热门问题