【问题标题】:Is it possible to import class method without instantiating class?是否可以在不实例化类的情况下导入类方法?
【发布时间】:2015-02-12 09:11:40
【问题描述】:

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

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

from .my_module import Mailer

mailer = Mailer()
mailer.do_stuff()

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

【问题讨论】:

  • 如果你有一个静态方法想与类分开使用,让它成为一个函数“初始化” 是什么意思?您可以在不创建实例 (Mailer.do_stuff()) 的情况下访问类和静态方法,但必须初始化类对象(因为在此之前它们不存在)。
  • 是的,你明白了,我的意思是类的实例化

标签: python oop python-2.7 import python-2.x


【解决方案1】:

您可以访问类的 classstatic 方法,而无需创建实例。比如下面这个demo类:

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"

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

>>> Demo.class_method()
Called a class method
>>> Demo.static_method()
Called a static method

但是我们不能调用 instance 方法,因为我们没有 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)

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

>>> instance = Demo()
>>> instance.class_method()
Called a class method
>>> instance.static_method()
Called a static method
>>> instance.instance_method()
Called an instance method

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

【讨论】:

  • 在 Python 3 中,你当然可以调用Demo.instance_method,如果你给它提供了一个对象。
猜你喜欢
  • 2022-06-27
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
  • 2022-07-22
相关资源
最近更新 更多