簡體   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