AttributeError:'function'对象没有属性'Model'PySB

时间:2013-07-26 16:59:41

标签: attributeerror

我刚刚安装PySB并试图让它工作。我运行下载的文档附带的示例,但它不起作用。

import pysb as psb
from pysb.integrate import odesolve as psb
from pylab import linspace, plot, xlabel, ylabel, show:   

psb.Model()

# Declare the monomers
psb.Monomer('L', ['s'])
psb.Monomer('R', ['s'])

# Declare the parameters
psb.Parameter('L_0', 100)
psb.Parameter('R_0', 200)
psb.Parameter('kf', 1e-3)
psb.Parameter('kr', 1e-3)

# Declare the initial conditions
psb.Initial(L(s=None), L_0)
psb.Initial(R(s=None), R_0)

# Declare the binding rule
psb.Rule('L_binds_R', L(s=None) + R(s=None) <> L(s=1) % R(s=1), kf, kr)

# Observe the complex
psb.Observable('LR', L(s=1) % R(s=1))

if __name__ == '__main__':
    print __doc__
    # Simulate the model through 40 seconds
    time = linspace(0, 40, 100)
    print "Simulating..."
    x = psb.odesolve(model, time)
    # Plot the trajectory of LR
    plot(time, x['LR'])
    xlabel('Time (seconds)')
    ylabel('Amount of LR')
    show()

我遇到的第一个错误是psb.odesolve()

AttributeError: 'function' object has no attribute 'Model'
你可以建议吗? 感谢

我尝试了pysb.org上的代码,我收到了错误:

Traceback (most recent call last):
  File "C:\Users\Ruda\Desktop\t2.py", line 33, in <module>
    x = odesolve(model, time)
  File "C:\Python27\lib\site-packages\pysb\integrate.py", line 298, in odesolve
    solver = Solver(model, tspan, integrator, **integrator_options)
  File "C:\Python27\lib\site-packages\pysb\integrate.py", line 86, in __init__
    pysb.bng.generate_equations(model)
  File "C:\Python27\lib\site-packages\pysb\bng.py", line 261, in generate_equations
    lines = iter(generate_network(model).split('\n'))
  File "C:\Python27\lib\site-packages\pysb\bng.py", line 220, in generate_network
    bng_file = open(bng_filename, 'w')
IOError: [Errno 22] invalid mode ('w') or filename: '<interactive>_5136_5952_temp.bngl'

3 个答案:

答案 0 :(得分:1)

http://pysb.org/的示例相比,您看起来有较小的语法错误和不同的导入。此外,PySB文档说您必须这样做:

from pysb import *
Model()

初始化事物,然后该构造显然在模块的命名空间中创建了一个model变量。我建议完全按照原样复制pysb样本,并在开始调整之前验证它是否正常工作。

答案 1 :(得分:1)

PySB开发人员。

问题如下:

import pysb as psb
from pysb.integrate import odesolve as psb
psb.Model()

您已将pysb导入为“psb”,但之后您已将函数odesolve 导入为psb 。因此,当你调用psb.Model()时,它试图在函数odesolve上调用类构造函数“Model”。这就是为什么它给出错误“'function'对象没有属性'Model'”。

为了这个例子,我建议只做

from pysb import *
from pysb.integrate import odesolve

并删除Component构造函数前面的psb限定符。

另外,我建议您通过电子邮件pysb@librelist.org注册pysb邮件列表!我们可以在那里及时回复您的问题。如果您有任何其他问题,请告诉我们。

最佳,

John Bachman

答案 2 :(得分:0)

另一位PySB开发人员。 John Bachman是对的 - 在您的原始代码中,您的第一个导入import pysb as psb被第二个导入from pysb.integrate import odesolve as psb遮蔽。只需删除第二行中的as psb,然后将psb.odesolve更改为odesolve。在第三行的末尾还有一个无关的冒号,需要删除。我解决了这些问题,代码运行正常。

关于pysb.org主页中的示例代码所带来的错误,看起来您已将代码粘贴到交互式python会话中。不幸的是,在该上下文中运行odesolve()存在错误。尝试将示例代码保存到.py文件并从命令行运行它。该错误将在下一个PySB版本中修复。