2010-01-27 45 views
1

我創建這個:Python/Django:在Python中使用「Item」作爲類名是明智的嗎(在這種情況下,在Django中)?

# models.py 

class Item(models.Model): 
    sku = models.CharField(max_length=20) 

class Attribute(models.Model): 
    item = models.ForeignKey(Item, related_name='items') 

是不是會導致在Python命名衝突?像:

# views.py 

some_object.items.create(sku='123abc') 

# Is there a place/way that this could cause errors, like: 
# AttributeError: Bound method 'items' has no attribute "create" 
# Since items() on a dict-like object could be a method to return a list, 
# and Django could add support for .items() on a queryset right? 

如果這是一個壞主意,我可以改變名稱。

回答

2

模型與查詢集不同,它們都沒有記錄爲類似字典。這樣做不應該有任何問題。

如果你真的很擔心,那麼儘可能多地公開這些代碼,並讓人們使用它:)如果沒有其他的東西,Django核心團隊真的很努力地檢查儘可能多的「野外」代碼儘可能以任何方式擴展記錄的API。他們確實在意儘可能不打破人們現有的代碼。

如果公開不是一個選項,那麼至少要看郵件列表,這樣當有人提出「嘿,讓我們給Model添加一個.items方法!」時,你至少可以用「那會在適當的時候破壞我的代碼「。

3

它似乎有點通用,但沒有比「屬性」更多。如果可能,我會給它一個基於應用程序的前綴。

+0

「有點通用」?我會說它太模糊以至於毫無意義。當然,有比「項目」和「屬性」更清晰準確的名稱。 – 2010-01-27 11:15:56

+0

「屬性」不在應用程序中。這只是爲了舉例。有問題的班是「項目」。如果有人在他們的商店中有「物品」,那麼它就不適用於「無意義」這個詞語了,是嗎?可能使用這個術語的原因是,「項目」在電子商務世界中比「產品」更普遍,雖然「產品」不一定能夠推斷混淆的可能性,但我保持公開介意命名約定。 – orokusaki 2010-01-27 17:52:10

2

這真的不是問題。如果你有一些隨機對象,並覺得'項目'是一種方法的合適名稱,那麼繼續。它不會與碰巧在其他對象上使用的名稱發生衝突。

只要您認爲方法名稱沒有誤導,並且不會造成混淆,請繼續。

1

使用默認item_set,無問題:)

相關問題