【问题标题】:Can you pass a class (not an object) as a parameter to a method in python?您可以将类(不是对象)作为参数传递给python中的方法吗?
【发布时间】:2009-05-12 02:35:23
【问题描述】:

我想做如下的事情

class A:
  def static_method_A():
    print "hello"

def main(param=A):
  param.static_method_A()

我希望它等同于A.static_method()。这可能吗?

【问题讨论】:

    标签: python static parameters


    【解决方案1】:

    当然。类是 Python 中的一等对象。

    尽管在您的示例中,您应该为您的方法使用@classmethod(类对象作为初始参数)或@staticmethod(无初始参数)装饰器。

    【讨论】:

    • 不,我的回答不是基于你的。但是,我 写了一个句子的答案只是为了抢先一步,然后在 5 分钟的宽限期内扩展它。
    • 这就是前几天给我同样的垃圾的同一个未知数......我花时间写了一个深思熟虑的答案并帮助某人,甚至没有注意任何人其他人正在发帖。我给了他一个遗憾+1,但现在我后悔了。我认为每个人都需要停止对名誉的渴望,而只是尝试互相帮助。
    • 谢谢,汤姆,你赢了;我完全同意你的看法。 (我刚刚用更讽刺的东西替换了我对 Unknown 的最后评论,只是因为他挑剔其他可怜的用户让我很生气。)
    • 这被称为西部最快的枪。如果你足够快地得到一个简单的答案,你仍然有五分钟的宽限期来详细说明你的答案,并且仍然保持你在顺序中的首位。我已经这样做了很多次,以简短回答并加载更多信息和资源。这并不意味着任何人都在抄袭其他人。
    • 只要快速简单的答案中包含有用的信息,我不介意它不完全彻底。在我看来,无论问题的答案是什么就足够了,并且快速响应对于提出问题的人来说非常有用。回过头来把答案改得更彻底,对于未来遇到类似问题的读者很有用。
    【解决方案2】:

    您应该能够执行以下操作(注意 @staticmethod 装饰器):

    class A:
      @staticmethod
      def static_method_A():
        print "hello"
    def main(param=A):
      param.static_method_A()
    

    【讨论】:

      【解决方案3】:

      当然,为什么不呢?不要忘记在静态方法中添加@staticmethod。

      class A:
        @staticmethod
        def static_method_A():
          print "hello"
      
      def main(param=A):
        param.static_method_A()
      

      【讨论】:

      • 在静态方法上链接到 python 文档 (docs.python.org/library/functions.html#staticmethod)
      • 未知,不要为 musicfreak 的回答或我的回答而声称功劳。如果我的帖子是您唯一以这种方式发表评论的帖子,我会放手;我确信我的答案足以知道我没有抄袭任何人。但是 musicfreak 是 SO 的新手;你必须比其他用户更好。错误地指责他们抄袭你只是......太高估自己了。 :-P
      • @Chris 太可疑了,您和 musicfreak 的答案基本上是“是”。然后当我得到我的静态方法答案时,1分钟后,你们俩都变成了和我一样的答案。
      • 一点也不可疑 - 这是 Stack Overflow 上的正常处理方式,当您有一个问题,其中一个答案与此处一样明显时。
      • @David 如果很明显那么为什么在我想出我的答案之前会有 3 个不同的答案?然后他们都换了?
      猜你喜欢
      • 2015-09-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 2011-06-20
      • 2020-09-25
      • 2019-11-27
      • 2022-01-10
      相关资源
      最近更新 更多