2012-11-15 75 views
2

我有一個Python文件,其中填充了h1imgstrong之類的函數以供使用樣式文本。這些函數的定義如下:允許使用令牌`類`作爲方法簽名中的命名參數

def _wrapTag(tag, text, **attributes): 
    out = _createTag(tag, **attributes) 
    out += text 
    out += "</" + tag + ">" 
    return out 

def _createTag(tag, **attributes): 
    out = "<" + tag 
    if attributes: 
     for attr, value in attributes: 
      out += " " + attr + "=\"" + value + "\"" 
    out += ">" 
    return out 

def h2(text, **attributes): 
    return _wrapTag("h2", text, **attributes) 

在一個理想的世界,創造與類modal一個div,我會打電話div(content, class="modal")然而class是受限制的關鍵字。有沒有什麼辦法可以繞過這個而不需要在_createTag增加一個特殊情況?

回答

4

的處理的標準PEP 8方式是增加一個結尾下劃線:

  • single_trailing_underscore_:按照慣例用於避免與Python關鍵字,例如衝突

Tkinter.Toplevel(master, class_='ClassName')

這是一個共同的解決辦法,並不會感到驚訝的人。你可以在你的代碼中執行如下代碼:

def _createTag(tag, **attributes): 
    out = "<" + tag 
    if attributes: 
     for attr, value in attributes.items(): 
      out += " " + attr.rstrip('_') + "=\"" + value + "\"" 
    out += ">" 
    return out 

因此它會自動從任何和所有屬性中刪除額外的下劃線。然後,你可以撥打:

>>> h2('contents', class_='myh2tag', id_='contenttag') 
'<h2 class="myh2tag" id="contenttag">contents</h2>' 

和解決兩個獨立的Python的命名空間衝突沒有處理它們中的一個特例。

1

不能將Python關鍵字用作標識符,就是這樣。這些類型的常用解決方案是使用class_作爲名稱。它需要特殊的外殼,但是無法繞過它。

+0

呃,我的感覺可能是真的。不管怎樣,謝謝你。 – Drakekin

0
_createTag(tag, **{"class": 1}) 

使用此語法,您可以將任何內容傳遞給**屬性。在功能中不需要更改代碼。

相關問題