是否可以在不实例化 class 的情况下导入 class 方法?
Is it possible to import class method without instantiating class?
class 位于 my_module.py
的某处
我可以这样访问他的方法
from .my_module import Mailer
mailer = Mailer()
mailer.do_stuff()
但是如果我可以只从 class 导入 do_stuff
方法呢?如果是这样,我可以不仅导入静态方法吗?
您可以在 class 上访问 class 和 static 方法,而无需创建实例。例如,下面的演示 class:
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"
现在我们可以直接在 class:
上调用其中两个方法
>>> 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
请注意,静态方法不使用任何 class 或实例属性,因此它们与函数几乎相同。如果您发现自己想在不引用 class 或实例的情况下调用函数,只需将其分解为函数即可。
class 位于 my_module.py
的某处我可以这样访问他的方法
from .my_module import Mailer
mailer = Mailer()
mailer.do_stuff()
但是如果我可以只从 class 导入 do_stuff
方法呢?如果是这样,我可以不仅导入静态方法吗?
您可以在 class 上访问 class 和 static 方法,而无需创建实例。例如,下面的演示 class:
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"
现在我们可以直接在 class:
上调用其中两个方法>>> 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
请注意,静态方法不使用任何 class 或实例属性,因此它们与函数几乎相同。如果您发现自己想在不引用 class 或实例的情况下调用函数,只需将其分解为函数即可。