我有问题。你看,我想和这个Java代码做同样的事情:
new Runnable() {
//run() is a method that you need to
//implement when you create any
//new instance of Runnable
public void run() {
//Code goes here
}
}
Java允许您使用Runnable实现抽象方法。问题是,我试图通过在类的init方法中传递一个参数然后将该方法存储为类中的变量(self.method)来在Python中复制相同的东西。 我稍后在该类的代码中运行该方法的地方。问题是,方法的所有参数都必须在创建类时传递,而不是在调用方法时传递,这是我想传递参数的时候:
class AbstractExample():
def __init__(self, method):
method #Run method
def exampleMethod(arg1,arg2):
print str(arg1) + "," + str(arg2)
AbstractExample(exampleMethod(5,7))
输出是:“5,7”如果我在上面创建类时没有传递参数,我会收到错误。我的问题是,有什么办法可以用另一种方式完成上面的Java代码吗?
答案 0 :(得分:0)
首先,要运行method
,您应该使用method()
。
此外,您在将exampleMethod
传递给AbstractExample
之前执行class AbstractExample():
def __init__(self, method):
method() #Run method
def exampleMethod(arg1,arg2):
print str(arg1) + "," + str(arg2)
AbstractExample(lambda: exampleMethod(5,7))
。你可以这样做,而不是:
Create member CurrentCube.[Measures].[My Calc]
as null
,format_string="0.0%";
scope(Filter([Account Group].[Account Group].[Account Group].Members, LEFT([Account Group].[Account Group].currentmember.member_caption,5)="ROOMS"));
[Measures].[My Calc] = iif(MTDAvailableRooms=0,null,([MTDQuantity]/[MTDAvailableRooms]));
end scope;
答案 1 :(得分:0)
Python没有类似于Java的抽象类。您可以将callable作为函数参数的值传递。
rake db:migrate
在我看来,你想要的是存储一个可调用的及其参数,以便以后执行。这里有部分:
class AbstractExample():
def __init__(self, arg1, arg2):
self.arg1 = arg1
self.arg2 = arg2
def call_now_with_my_parameters(self, callable):
callable(self.arg2, self.arg2)
def example_function(arg1,arg2):
print("{},{}".format(arg1, arg2))
ae = AbstractExample(5, 7)
ae.call_now_with_my_parameters(example_function)
然后,您可以将 p 和 em 变量作为函数参数传递。
这可能就是你打算做的事情:
from functools import partial
p = partial(print, 'aef','qwe')
p()
em = partial(exampleMethod, 5, 6)
em()