2009-10-09 68 views
0

我正在編寫一個程序,該程序使用存儲在此類中的值隨機組合數學表達式。 操作符與他們需要的參數數量一起存儲在字典中。 參數存儲在一個列表中。 (四個x確保經常選擇x變量) 深度,比率,方法和謎語是需要的其他值。在一個類中存儲參數以及如何訪問它們

我把這些放在一個班級,所以他們會在一個地方,我可以去改變他們。 這是做這件事最好的pythonic方法嗎? 看來我不能通過Params.depth引用它們。這會產生錯誤'Params沒有屬性'深度'。我必須創建一個Params()(p = Params())的實例並通過p.depth引用它們。

我對Python很失敗。謝謝

class Params(object): 
    def __init__(self): 
     object.__init__(self) 
     self.atoms =['1.0','2.0','3.0','4.0','5.0','6.0','7.0','8.0','9.0','x','x','x','x'] 
     self.operators = {'+': 2, '-': 2, '*': 2, '/': 2,'+': 2, '-': 2, '*': 2, '/': 2, '**': 2, '%': 2} 
     self.depth = 1 
     self.ratio = .4 
     self.method = '' 
     self.riddle = '1 + np.sin(x)' 
+0

我想我會挑剔這裏說'對象.__ init__'什麼都不做。 – Triptych 2009-10-09 16:12:39

+0

我從兩個回覆中學到了更多。我會接受三聯。謝謝 – 2009-10-09 16:34:26

回答

7

你在那裏有對象屬性。你的意思是使用類變量:

class Params(object): 
    atoms =['1.0','2.0','3.0','4.0','5.0','6.0','7.0','8.0','9.0','x','x','x','x'] 
    operators = {'+': 2, '-': 2, '*': 2, '/': 2,'+': 2, '-': 2, '*': 2, '/': 2, '**': 2, '%': 2} 
    depth = 1 
    ratio = .4 
    method = '' 
    riddle = '1 + np.sin(x)' 

# This works fine: 
Params.riddle 

這是相當普遍在Python做到這一點,因爲幾乎所有人都認爲Params.riddle是漂亮了很多比Params['riddle']輸入。如果你發現自己做了很多事情,你可能需要使用this recipe這使得事情變得更容易和更清晰。

警告:如果Params類變得太大,舊的,grumpier Pythonista可能會出現,告訴你只要將所有的垃圾變成自己的模塊。

0

你可以在課堂上做到這一點,但我更願意把它放在字典中。字典是Python中的通用容器類型,它們對於這類事情非常有用。現在

params = { 
    atoms: ['1.0','2.0','3.0','4.0','5.0','6.0','7.0','8.0','9.0','x','x','x','x'], 
    operators: {'+': 2, '-': 2, '*': 2, '/': 2,'+': 2, '-': 2, '*': 2, '/': 2, '**': 2, '%': 2}, 
    depth: 1, 
    ratio: .4, 
    method: '', 
    riddle = '1 + np.sin(x)' 
} 

你可以做params['depth']params['atoms'][2]。無可否認,這比對象形式稍微冗長些,但我個人認爲值得避免使用不必要的類定義來污染名稱空間。

+0

你的「污染名字空間」和完全相同的新的全局名稱數目:1。 – Triptych 2009-10-09 16:19:17

相關問題