Javascript Brython:从单独的python文件调用对象的方法
我对Brython框架很陌生,所以我的问题将是一个基本的问题。对此表示歉意 这是我的脚本“log.py”: 和html格式:Javascript Brython:从单独的python文件调用对象的方法,javascript,python,brython,Javascript,Python,Brython,我对Brython框架很陌生,所以我的问题将是一个基本的问题。对此表示歉意 这是我的脚本“log.py”: 和html格式: <script src = "https://cdnjs.cloudflare.com/ajax/libs/brython/3.3.20/brython_stdlib.js"></script> <script src = "log.py" type = "text/python"></scrip
<script src = "https://cdnjs.cloudflare.com/ajax/libs/brython/3.3.20/brython_stdlib.js"></script>
<script src = "log.py" type = "text/python"></script>
<script>
//some javascript code
</script>
//一些javascript代码
现在,在我的javascript中,我想调用对数类的log()函数。有人能告诉我如何才能做到这一点吗
提前感谢:-)Brython允许您直接在浏览器中编写Python,但这意味着您必须知道自己在Python方面做了什么。您的代码段在语法上不正确。当我们修正语法时,我们必须修正它,使其具有一定的意义-(因此,如果在类构造时将x和y作为对数操作数和基数,那么在使用日志时,就不希望再次出现这种情况) 然后,当我们修复它时,您必须修复html部分,以便它能够正确地使用Brython。然后你就可以随心所欲了。始终查看Javascript控制台输出(ctrl+F12)-Brython可以在加载后生成一些有用的回溯,告知Python代码中的错误 然后,您必须记住,尽管Brython的作者已经通过下面的规定使从普通Javascript调用Python函数变得几乎透明,但对于您尝试使用的类和方法来说,这并不是一种直接透明的方式 TL;DR:对于已经有一些Brython代码在工作并且希望从Javascript调用Brython函数的人,只需对Brython代码执行以下操作:
def my_func(...):
...
from browser import window
window.my_func = my_func
现在,您可以使用普通Javascrit脚本块中的“my_func”,但您必须允许Brython加载并运行其代码—任何使用Brython的javascript都必须在onload事件运行mainBrython
函数后调用。参见下面的示例
因此,在您的情况下,我们可以将log.py文件重写为:
import math
class Logarithm:
def __init__(self, x, y=10):
self.x = x
self.y = y
def log(self):
return math.log(self.x,self.y)
from browser import window
window.Logarithm = Logarithm
然后,我们必须正确地编写html文件,将main Brython和Python stdlib作为两个单独的脚本标记加载,在onload事件中激活Brython,然后我们就可以开始了:
<html>
<head>
<script src="http://brython.info/src/brython.js"></script>
<script type="text/javascript" src="http://brython.info/src/brython_stdlib.js"></script>
<script src="log.py" type="text/python3"></script>
<script type="text/javascript">
function do_python() {
var obj = window.Logarithm(100, 10);
var result = obj.__class__.log(obj);
document.write(result);
}
</script>
</head>
<body onload="brython(); setTimeout(do_python, 300)">
</body>
</html>
函数do_python(){
var obj=窗口对数(100,10);
var结果=对象类日志(obj);
记录(结果);
}
注意,实际上调用Brython类的Javascript被包装在一个setTimeout调用中。这让布莱顿可以安排好一切。
尽管您可以通过简单地调用类来创建Brython对象的实例,但要对其调用方法,您必须手动调用\uuuuu class\uuuu
属性,并将实例作为第一个参数显式传递
只有从Brython使用实例时,才会使用在类中查找方法名称并自动添加self
参数的机制
<html>
<head>
<script src="http://brython.info/src/brython.js"></script>
<script type="text/javascript" src="http://brython.info/src/brython_stdlib.js"></script>
<script src="log.py" type="text/python3"></script>
<script type="text/javascript">
function do_python() {
var obj = window.Logarithm(100, 10);
var result = obj.__class__.log(obj);
document.write(result);
}
</script>
</head>
<body onload="brython(); setTimeout(do_python, 300)">
</body>
</html>