存储类中的参数以及如何访问它们

时间:2009-10-09 16:00:07

标签: python

我正在编写一个程序,使用此类中存储的值随机组装数学表达式。 运算符与它们需要的争论数一起存储在字典中。 争论存储在列表中。 (四个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)'

2 个答案:

答案 0 :(得分: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类太大,可能会出现一个较老的,脾气暴躁的Pythonista,并告诉您将所有垃圾移到自己的模块中。

答案 1 :(得分: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]。不可否认,这比对象形式稍微冗长一些,但我个人认为避免使用不必要的类定义来污染命名空间是值得的。