【问题标题】:Is there a python construct that is a dummy function?是否有一个作为虚拟函数的 python 构造?
【发布时间】:2015-12-11 12:19:06
【问题描述】:

是否存在对应于不带参数、什么都不做、什么也不返回的函数的 python 构造?类似于对象None 但那将是一个函数而不是一个对象?

上下文

我想定义一个类,其中构造函数将函数作为参数并将其引用到类属性。在实例化时,用户决定他/她是否希望该函数成为他/她自己定义的实际函数,或者保留默认值,即调用一个什么都不做的虚拟函数。

这是我现在拥有的:

def sayHello():
    print("hello world !")

def doNothing():
    pass

class myClass:
    def __init__(self, myFunc):
        self.doIt = myFunc

myInstance = myClass(sayHello)
myInstance.doIt()
myInstance = myClass(doNothing) # Works but requires defining function doNothing()
myInstance.doIt()
#myInstance = myClass(None) # Returns error "'NoneType' object is not callable"
myInstance.doIt()

【问题讨论】:

    标签: python function nonetype


    【解决方案1】:

    lambdas 怎么样?

    myInstance = myClass(lambda:None)
    

    当然你可以默认传递给你的__init__函数:

    class myClass:
        def __init__(self, myFunc = lambda:None):
            self.doIt = myFunc
    

    【讨论】:

    • 我认为函数对象是可变的,这让我相信这是一个棘手的想法。我不会把它作为这样的默认参数(而是使用重新创建的函数对象),除非我确定没有人可以访问和更改它...
    【解决方案2】:

    这应该可行:

    class myClass:
        def __init__(self, myFunc = lambda : None):
            self.doIt = myFunc
    
    myInstance = myClass()
    

    【讨论】:

      【解决方案3】:

      我使用了以下内容:

      a=lambda:None
      a()
      print a()
      

      后一行打印无。

      【讨论】:

        【解决方案4】:

        这对我有用:

        def none(function=True): if function==True: return None else: function()

        【讨论】:

          猜你喜欢
          • 2012-04-13
          • 2015-10-09
          • 2010-09-09
          • 2012-01-20
          • 2010-10-21
          • 1970-01-01
          • 2011-08-02
          • 2011-04-08
          相关资源
          最近更新 更多