【问题标题】:What does a static method do in python?python中的静态方法有什么作用?
【发布时间】:2019-09-11 07:23:06
【问题描述】:

我目前正在学习 Python 并且是新手。我遇到了 OOP 概念,但仍然对静态方法的主要目的感到困惑。我无法想象它的实用性或何时应该使用它(需要时)。有谁知道它的作用以及我应该何时使用它?

【问题讨论】:

    标签: python python-3.x oop static


    【解决方案1】:

    静态方法的一个常见用例是创建特定对象。

    例如,如果你有一个类 A,它可以从字符串数据初始化。但是字符串数据可以是xml或者json。你可以看到类似的东西:

    class A:
        @staticmethod
        def fromXml(string):
            result = A()
            result.data = ...parseXML...
            return result
    
        @staticmethod
        def fromJson(string):
            result = A()
            result.data = ...parseJson...
            return result
    

    然后像这样使用它:

    object1 = A.fromXml("<xml><data>hello</data></xml>")
    object2 = B.fromJson("{'data': 'hello'}")
    

    【讨论】:

    • 但是为什么要在方法内部创建一个特定对象,然后在它之外创建另一个对象呢?即结果和对象1
    • 它没有创建 2 个对象。它只创建一个对象,它首先存储在函数内部的名称“result”中,然后返回,然后存储在变量名称“object1”中。
    • (如果你问这样的问题,我假设你还没有完全掌握变量的概念以及对象的工作原理)
    【解决方案2】:

    静态方法是不使用类实例(self 参数)的方法。 假设您有这样的课程:

    class test:
        def func1(self): print('hello ' + self.name)
        @staticmethod
        def func2(): print('hello')
    
    a = test()
    a.name = 'PyCoder'
    

    然后您将调用func1 并使用test 的实例,例如:a.func1()

    func2 是静态的,因此它不需要实例,您将使用类型名称调用它。 例如:test.func2()

    【讨论】:

    • a.func2() 仍然可以工作,所以可能不是最好的例子
    • 这是对它们的很好的总结,但是因为 Python 也有独立的函数,当功能与类无关时应该首选这些函数,Daid 的回答更好地切入了要点跨度>
    猜你喜欢
    • 2020-12-27
    • 2023-03-29
    • 2011-07-11
    • 2013-08-30
    • 2011-04-23
    • 2010-11-13
    • 1970-01-01
    • 2011-01-27
    • 2012-06-10
    相关资源
    最近更新 更多