是否可以在不实例化类的情况下导入类方法?

mic*_*imo 4 python oop import python-2.x python-2.7

让类位于my_module.py中的某个位置

我可以像这样访问他的方法

from .my_module import Mailer

mailer = Mailer()
mailer.do_stuff()
Run Code Online (Sandbox Code Playgroud)

但是如果我可以do_stuff从类中导入方法呢?如果是这样,我不仅可以导入静态方法吗?

jon*_*rpe 6

您可以在类上访问静态方法,而无需创建实例.例如,参加以下演示类:

class Demo(object):

    def instance_method(self):
        print "Called an instance method"

    @classmethod
    def class_method(cls):
        print "Called a class method"

    @staticmethod
    def static_method():
        print "Called a static method"
Run Code Online (Sandbox Code Playgroud)

现在我们可以直接在类上调用其中两个方法:

>>> Demo.class_method()
Called a class method
>>> Demo.static_method()
Called a static method
Run Code Online (Sandbox Code Playgroud)

但是我们不能调用实例方法,因为我们没有self参数的实例:

>>> Demo.instance_method()

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    Demo.instance_method()
TypeError: unbound method instance_method() must be called with Demo instance as first argument (got nothing instead)
Run Code Online (Sandbox Code Playgroud)

您可以在实例上调用所有三种类型的方法:

>>> instance = Demo()
>>> instance.class_method()
Called a class method
>>> instance.static_method()
Called a static method
>>> instance.instance_method()
Called an instance method
Run Code Online (Sandbox Code Playgroud)

请注意,静态方法不使用任何类或实例属性,因此它们与函数几乎完全相同.如果您发现自己想要在不引用类或实例的情况下调用函数,只需将其分解为函数即可.

  • 在Python 3中,如果你为它提供一个对象,你当然可以调用“Demo.instance_method”。 (2认同)