将方法参数传递给类

维沙尔·奈尔

我有以下可调用:

class SomeClass(object):

    def __init__(self, expr, return_status):

        self._expr = expr
        self._status = return_status


    def __call__(self):   

        if self._expr == self._status:
            return True

    def __str__(self):

        return ("Function: %s\n     Return Status: %s\n" %
                (self.__class__.__name__, self._status))

我面临的问题是,每当我尝试传递如下表达式时:

some_variable = SomeFunction(SomeClass.some_method,return_status=True)

SomeClass.some_method被评估并存储self._expr为布尔值。

我真正想要的是这个表达式 ( SomeClass.some_method) 被存储self._expr并在每次__call__(self)调用方法时进行评估

我说的有道理吗?

假设我正在举以下例子:

def addition(c,b):
        print "'addition' function called!\n"
        sum = c+b
        if sum>5:
            return True
        else:
            return False

    script_timeout = 3


    some_variable = SomeFunction(addition(1,2),return_status=True)

    print "some_variable: \n%s" %some_variable

    some_class.some_method(some_variable, script_timeout, 1)

这给了我以下输出:

'addition' function called!

SomeFunction (_init_) function called!

expr: False

self._expr = False and self._status = True

SomeFunction (_str_) function called!

self.__class__.__name__ = SomeFunction and self._expr = False

monitor: 
Function: SomeFunction
     Return Status of the Expression: True

SomeFunction (_call_) function called!

self._expr = False and self._status = True

SomeFunction (_call_) function called!

self._expr = False and self._status = True

SomeFunction (_call_) function called!

self._expr = False and self._status = True

因此,关注的是在SomeFunction 的每次迭代调用中都不会调用加法函数(通过some_method方法。)

所需的功能是SomeFunction(当被some_method调用)应该调用函数加法

资源中心

假设expr将是一个方法/函数并且假设您知道返回什么方法/函数,您有 3 个选项。只需遵循这 3 个选项中的一个,您就会实现您想要的。

1)您可以expr将分配调用self.expr

....
class CheckStatus:
    def __init__(self, expr, ...)
        self.expr = expr() # expr() being called here, store whatever the result is to self.expr

    def __call__(self):
        # self.expr already holds a boolean value, or anything your expr returns
        if self.expr == self.status:
            # self.expr match ...
            # do what else you have to do

obj = CheckStatus(SomeClass().method, ...) # pay attention how we pass the method here

2)如果self.expr是对那个的引用expr,那么:

class CheckStatus:
    def __init__(self, expr, ...):
        self.expr = expr

    def __call__(self):
        # in this example, self.expr now it's a reference to some method
        # thus you need to call self.expr here
        if self.expr() == self.status:
            ....

obj = CheckStatus(SomeClass().method, ...) # pay attention how we pass method for this example

3)SomeClass().method()在实例化时调用CheckStatus()

class CheckStatus:
    def __init__(self, expr, ...):
        self.expr = expr # for this example, expr already is a boolean or anything else some method/function returned

    def __call__(self):
        # don't need to call anything here
        if self.expr == self.status:
            ....

obj = CheckStatus(SomeClass().method(), ...) # because here we called SomeClass().method()

您必须在CheckStatus某个地方调用传递给的方法/函数,否则您将永远无法检查该方法/函数的结果。希望很清楚。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将内联构造的类作为类参数传递给方法

来自分类Dev

将内联构造的类作为类参数传递给方法

来自分类Dev

将@Context参数传递给类中的方法

来自分类Dev

将枚举类作为参数传递给Java中的方法

来自分类Dev

对类成员进行操作,而不是将参数传递给方法

来自分类Dev

如何将类作为可选参数传递给方法?

来自分类Dev

将参数传递给方法

来自分类Dev

将参数传递给类构造函数

来自分类Dev

将参数传递给实现IMappingAction的类

来自分类Dev

将动态值传递给类参数

来自分类Dev

将参数传递给类装饰器

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

将类型参数作为类型参数的类传递给Java中的泛型方法

来自分类Dev

Swift:如何将闭包参数从类方法传递给类中的函数

来自分类Dev

C ++:将类作为参数传递给其他类的方法

来自分类Dev

将类的方法作为参数传递给C ++中的另一个类

来自分类Dev

C#将类作为参数传递给方法,并在其中调用静态方法

来自分类Dev

将类作为参数传递给方法,然后调用静态方法

来自分类Dev

C#将类作为参数传递给方法,并在其中调用静态方法

来自分类Dev

将参数传递给 DAL 方法中的存储过程的类中的调用方法

来自分类Dev

将方法作为参数传递给PHP

来自分类Dev

将参数传递给Java方法

来自分类Dev

将参数传递给PrivateObject方法

来自分类Dev

将参数从AsyncTask传递给方法

来自分类Dev

将方法参数传递给函数

来自分类Dev

Java代码,将参数传递给方法

来自分类Dev

将参数传递给Java方法

来自分类Dev

将函数作为参数传递给方法

来自分类Dev

将参数传递给laravel的URL :: to()方法

Related 相关文章

热门标签

归档