我有这样的代码:
class Foo() {
time_to_play = 0
class Bar() {
void change_player() {
//I need something HERE
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要time_to_play从类中更改属性Foo,但是在方法内部进行此更改change_player(),即在类下Bar.
我不能在课堂Bar外宣布课程Foo,并做一个'扩展',并打电话给超级.......,因为在我的情况下它打破了OO.
另外,我不想做time_to_play一个静态变量,调用Foo.time_to_play
我怎么能这样做?
我想在bash脚本的末尾执行一些命令,即使用户按CTRL + C取消其执行.
我知道我可以从另一种编程语言(例如Python)中运行bash脚本,这样我就可以使用'finally'(try-finally)块来执行一些代码.
但是知道StackOverflow是一个交换神话般思想的中心,我问是否有办法在我的bash脚本中做我想做的事情.
那么,想法?
编辑:
我想要的是杀死我的bash中打开的每个进程,即selenium和Xvfb proccesses.
我试着写这个代码:
trap "selenium_pids=$(ps ux | awk '/selenium/ && !/awk/ {print $2}');for pid in $selenium_pids; do kill -9 $pid;done; xvfb_pids=$(ps ux | awk '/Xvfb/ && !/awk/ {print $2}'); for pid in $xvfb_pids; do kill -9 $pid; done" EXIT
Run Code Online (Sandbox Code Playgroud)
但这迫使我多次按"CTRL + C",在我的脚本内部每次运行子进程,如:
Testing nsi.bd.helpcenter ...^C: -- Total time: 0min 0seg
Testing nsi.bibliography ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibrary ...^C: -- Total time: 0min 0seg
Testing nsi.digitallibraryinstaller ...^C: -- Total time: 0min …Run Code Online (Sandbox Code Playgroud) 我将解释这一点:
我在一个我不能使用python内置函数的环境中(比如'sorted','set'),不能声明方法,不能创造条件(if) ,并且不能制作循环,除了:
可以调用方法(但每次只调用一个,并保存另一个变量的返回值
foo python:item.sort(); #foo变量获取item.sort()返回的值
bar python:foo.index(x);
并且可以做列表理解
[item ['bla'] for foo中的项目]
......我认为这不会对这个问题有所帮助
我有一个'correct_order'列表,其中包含以下值:
correct_order = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)
我有一个'messed_order'列表,其中包含以下值:
messed_order = [55, 1, 44, 3, 66, 5, 4, 7, 2, 9, 0, 10, 6, 8]
Run Code Online (Sandbox Code Playgroud)
好吧,我必须重新排序'messed_order'列表,使用'correct_order'索引作为基础.未包括在correct_order中的其余项目的顺序无关紧要.
这样的东西会解决(再次,除了我不能使用循环):
for item in correct_order:
messed_order[messed_order.index(item)], messed_order[correct_order.index(item)] = messed_order[correct_order.index(item)], messed_order[messed_order.index(item)]
Run Code Online (Sandbox Code Playgroud)
并且会导致我想要的'ordered_list':
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 55, 66, 44]
Run Code Online (Sandbox Code Playgroud)
那么,我该怎么做呢?
对于那些了解zope/plone的人,我在皮肤页面(.pt)上,没有辅助python脚本(我认为这对于皮肤页面是不可能的,仅适用于浏览器页面.如果是,告诉我如何和我会这样做.
我从jquery的json调用中收到一些'body'内容,在那里我可以通过执行以下方式获取返回的唯一javascript元素:
script_element = $(data.body)[1]
Run Code Online (Sandbox Code Playgroud)
这相当于:
<script type=?"text/?javascript">?
updater('foo', 'bar', {}, '0', constant='');
</script>?
Run Code Online (Sandbox Code Playgroud)
所以,typeof script_element回报"object"
而且,如果我跑script_element.innerText,我可以得到:
updater('foo', 'bar', {}, '0', constant='');
Run Code Online (Sandbox Code Playgroud)
收到这个脚本之后,我现在正在做的就是运行eval它,但是搜索我无法找到运行eval更改函数调用参数的方法.
我正在尝试做的是更改third调用的参数,在这种情况下{},可以根据json调用的返回而改变,所以我不能只搜索{}.
我也可以这样做script_element.text.split(',')[2],并在运行中更改此文本,但我认为应该有更好的方法来做到这一点.
我不知道javascript是否可以识别和处理"未来的方法调用",但仍然认为应该有更好的方法.
任何的想法?
我想知道是否有办法在被调用的方法中捕获异常.
例:
def foo(value):
print value
foo(x)
Run Code Online (Sandbox Code Playgroud)
这将抛出NameError异常,因为未声明x.我想在foo方法中捕获这个NameError异常.有办法吗?