相关疑难解决方法(0)

使用类/静态方法作为同一类方法中的默认参数值

我想做这样的事情:

class SillyWalk(object):
    @staticmethod
    def is_silly_enough(walk):
        return (False, "It's never silly enough")
    def walk(self, appraisal_method=is_silly_enough):
        self.do_stuff()
        (was_good_enough, reason) = appraisal_method(self)
        if not was_good_enough:
            self.execute_self_modifying_code(reason)
        return appraisal_method
    def do_stuff(self):
        pass
    def execute_self_modifying_code(self, problem):
        from __future__ import deepjuju
        deepjuju.kiss_booboo_better(self, problem)
Run Code Online (Sandbox Code Playgroud)

这个想法是有人可以做的

>>> silly_walk = SillyWalk()
>>> appraise = walk()
>>> is_good_walk = appraise(silly_walk)
Run Code Online (Sandbox Code Playgroud)

还有一些神奇的机器学习正在发生; 最后一点对我来说并不是特别感兴趣,这只是我发现的第一件事,它是在函数上下文和调用者的角度来举例说明静态方法的使用.

无论如何,这不起作用,因为is_silly_enough它实际上不是一个函数:它是一个对象,其__get__方法将返回原始is_silly_enough函数.这意味着它仅在作为对象属性引用时以"正常"方式工作.有问题的对象是由staticmethod()装饰器放入SillyWalkis_silly_enough属性和最初用该名称定义的函数之间的函数创建的.

这意味着,为了appraisal_method其中一个 SillyWalk.walk 它的调用者中使用from 的默认值,我们必须要么

  • 打电话appraisal_method.__get__(instance, owner)(...)而不是打电话appraisal_method(...)
  • 或者将其指定为某个对象的属性,然后将该对象属性引用为我们调用的方法 …

python static-methods decorator default-value class-method

5
推荐指数
1
解决办法
848
查看次数

如何将类方法作为参数传递给该类外部函数?

这对我来说是这样的:

class SomeName:
  def __init__(self):
    self.value = "something"
  def some_method(self):
    print self.value

def external_func(instance, method):
  method(instance)

external_func(SomeName(), SomeName.some_method)
Run Code Online (Sandbox Code Playgroud)

这似乎正常工作。这是正确的方法吗?

python methods arguments class

5
推荐指数
2
解决办法
8863
查看次数

如何在Python中将类成员函数的默认参数设置为同一类中的另一个成员函数

我想要做的是:将foo函数指针bar作为默认参数传递给函数。但这是不允许的。如何实施?

class Klass ():
    def __init__(self):
        print('init')

    def foo(self):
        print('foo')

    def bar(self, func=self.foo): # error here
        func()
        print('bar')
Run Code Online (Sandbox Code Playgroud)

python class

0
推荐指数
1
解决办法
859
查看次数