Java中的抽象方法

时间:2015-08-11 00:30:52

标签: python python-2.7

我有问题。你看,我想和这个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代码吗?

2 个答案:

答案 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()