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