2009-10-09 33 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

相关问题