1

python之禅告诉我们:应该只有一种明显的方式来做到这一点。

当涉及到以下情况时,这很难付诸实践。

一个类接收一个文档列表。输出是每个文档的字典,其中包含各种键/值对。每对取决于先前计算的一个,甚至取决于列表中其他字典的其他值/对。

这是此类的一个非常简化的示例。

什么是“明显”的方法?每个方法都会为每个字典添加一个值/对。

class T():
    
    def __init__(self,mylist):
        #build list of dicts
        self.J = [{str(i):mylist[i]} for i in range(len(mylist))]
        # enhancement 1: upper
        self.method1()
        # enhancement 2: lower
        self.J = self.static2(self.J)

    def method1(self):
        newdict = []
        for i,mydict in enumerate(self.J):
            mydict['up'] = mydict[str(i)].upper()
            newdict.append(mydict)
        self.J = newdict
    
    @staticmethod
    def static2(alist):
        J = []
        for i,mydict in enumerate(alist):
            mydict['down'] = mydict[str(i)].lower()
            J.append(mydict)
        return J
    
    @property
    def propmethod(self):
        J = []
        for i,mydict in enumerate(self.J):
            mydict['prop'] = mydict[str(i)].title()
            J.append(mydict)
        return J
        
    # more methods extrating info out of every doc in the list
    # ...

self.method1() 运行简单,每个字典都添加了一个新的键/值对。也可以使用静态方法 2。还有财产。

在我解除@property 的三种方式中,因为我没有添加另一个属性。从另外两个中你会选择哪一个?

请记住,该类将由数十个此 Methode 组成,因此不添加属性。仅更新(添加 keine 对值)列表中的字典。

我看不出method1和static2之间的区别。

谢谢。

4

0 回答 0