2012-02-07 66 views
0

最近我有一個想法,即編寫一個模塊將字典轉換爲有效的CSS代碼。我想聽聽你對我的代碼的評論。 許可證MIT,BSD等提高Python中代碼模塊質量的建議

的代碼非常簡單:

#pss.py 

__version__ = '1.0' 

class PSS: 
    def __init__(self, obj): 
     self.obj = obj 
     self.__data = {} 
     self.__parse(obj) 

    def __repr__(self): 
     return self.__build(self.obj) 

    def __build(self, obj, string = ''): 
     for key, value in sorted(self.__data.items()): 
      if self.__data[key]: 
       string += key[1:] + ' {\n' + ''.join(value) + '}\n\n' 

     return string 

    def __parse(self, obj, selector = ''): 
     for key, value in obj.items(): 
      if hasattr(value, 'items'): 
       rule = selector + ' ' + key 
       self.__data[rule] = [] 
       self.__parse(value, rule) 

      else: 
       prop = self.__data[selector] 
       prop.append('\t%s: %s;\n' % (key, value)) 

導入模塊:

#test.py 

from pss import * 

css = PSS({ 
    'html': { 
     'body': { 
      'color': 'red', 
      'div': { 
       'color': 'green', 
       'border': '1px' 
      } 
     } 
    } 
}) 

print(css) 

結果:

html body { 
     color: red; 
} 

html body div { 
     color: green; 
     border: 1px; 
} 

所以我需要你的建議,以改進代碼質量

+4

我想你應該在[coderiview](http://codereview.stackexchange.com/)上提問你的問題 – shenshei 2012-02-07 15:45:30

+0

爲什麼'PSS'類看起來非常像一個函數,它需要一個字典並返回一個字符串? – 2012-02-07 15:47:35

+0

@shenshe,謝謝你,我不知道那個 – 2012-02-07 15:47:55

回答

3
  1. 不要鍵入檢查參數到__init__:調用者可能比你更清楚。例如,你期望有一個「字典」。我可能會傳遞給你一個字典的子類,或者其他一些映射協議的實現,你現在的代碼會拒絕它。
  2. 不要像這樣使用__names,這很煩人。瞭解Python文化,您不必嘗試隱藏數據。 Python確實沒有一個防彈的方法來隱藏數據,所以不要嘗試。
  3. self.__data[i].__len__()只不過是len(self.__data[i])if len(xx):只能是if xx:。不知道爲什麼你認爲__len__是比len更Pythonic。通常,用戶代碼不會調用dunder方法,它們是爲Python提供的,可以代表您進行調用。
  4. 您的repr可能不應該與您的輸出相同。 repr用於在調試環境中顯示對象。
  5. 我不明白如何得到你的班的輸出。 Repr似乎是唯一的公共途徑,這很奇怪。至少使其成爲__str__方法。
  6. prop.insert(prop.__len__(), x)只是prop.append(x)
  7. 字符串格式化比增加串起來更容易,更可讀:'\t%s: %s\n' % (i, obj[i])
+0

'1.'我真的一直認爲它是一個好的做法來檢查傳入的參數。 '2。爲什麼不能和另外一種簡單的方法(嵌套函數除外)來隱藏本地數據? '3'我知道'len()',但我認爲'__len __()'是更多的Python方式)。 '4'我經常在許多專業應用中看到這種技術。 – 2012-02-07 15:54:58

+1

我已經回答了上面的這些... – 2012-02-07 15:57:47

+0

好吧,我會盡力滿足您的意見。也許還有哪些地方可以做得更容易? – 2012-02-07 16:05:11

2

我建議使用pylint,它會指出你的代碼風格的缺陷。除此之外,只要你保持你的代碼儘可能簡單和可讀,這只是一個偏好問題。

+0

哦,我忘了這個工具的全部 – 2012-02-07 16:00:23