将外部实例作为方法的隐式参数传递

时间:2018-03-27 20:23:02

标签: python class parameters state

假设我有一个带有实例方法my_method的MyClass类。

class MyClass:
     ...
     def my_instance_method(self, f):
          return f self
     ...

我希望能够传入一个可能是MyClass的实例方法的函数f,或者可能包含MyClass的实例方法(例如在lambda中或者与其他实例方法结合使用),但我不能&# 39; t想要将实例传递给参数函数 - 我只是想让参数函数假设" self"与" self"相同如果参数函数需要一个实例,那么外部调用。

例如,

MyClassInstance.my_instance_method(MyClass.another_instance_method(args))

我不确定如何在Python中最好地解决这个问题,但我觉得它类似于State monad在Haskell中的工作方式以及隐式参数在Scala中的工作方式。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您只需像任何其他函数一样调用此类函数或未绑定方法。其他论据必须单独传递。在最一般的形式中,它看起来像

RewriteEngine on

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.mediagrex\.com$ [NC]
RewriteRule ^/?$ /index.php?id=%1 [L]

RewriteCond %{QUERY_STRING} ^$
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteCond %{HTTP_HOST} ^([^.]+)\.mediagrex\.com$ [NC]
RewriteRule ^(.+?)/?$ /index.php?id=%1 [L]

对此方法的调用可能看起来像

def my_instance_method(self, f, *args, **kwargs):
    return f(self, *args, **kwargs)