我正在编写一个程序,使用此类中存储的值随机组装数学表达式。 运算符与它们需要的争论数一起存储在字典中。 争论存储在列表中。 (四个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 :(得分: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]
。不可否认,这比对象形式稍微冗长一些,但我个人认为避免使用不必要的类定义来污染命名空间是值得的。