Я пишу класс, подобный этому (упрощенному), чтобы представлять распределения вероятностей. Я хочу инициализировать объект Распространение только с его типом и параметрами и что у него есть некоторые функции, назначенные в соответствии с его типом.TypeError в определении класса
functions = {'exp':{
'parameters': ['l'],
'pdf': lambda x,p: exp(x/p[0])*p[0],
'cdf': lambda x,p: 1-exp(x/p[0]) },
'uniform':{
'parameters': ['x1','x2'],
'pdf': lambda x,p: 1/(p[1]-p[0]),
'cdf': lambda x,p: (x-p[0])/(p[1]-p[0]) }
}
class Distribution:
def __init__(self,dist_type,**parameters):
self.dist_type = dist_type
self.parameters = parameters
self.p = [ self.parameters[z] for z in functions[dist_type]['parameters'] ]
for key,val in functions[dist_type].items():
if key == 'parameters':
pass
else
setattr(self, key, lambda x:val(x,self.p))
dist = Distribution('exp',l=3.5)
Теперь, когда я бегу тип (dist.pdf) Я понимаю, что это лямбда-функция, но когда я запускаю функцию, скажем dist.pdf (4.0) в TypeError: «список» объект не является отозваны.
На стороне примечания, как стиль/сложность кода?
спасибо, я проверю эти методы, которые вы упомянули. Я просто хотел иметь класс, функции которого зависят от набора параметров, вещь стала более сложной, потому что параметры, которые мне нужны, зависят от «dist_type», поэтому я использовал словарь. – chuse