↑↑↑它没有
假设我有一个带有一些实用方法的课程:
class Utils:
@staticmethod
def do_stuff():
# some stuff
Utils.do_other_stuff()
# some more stuff
@staticmethod
def do_other_stuff():
# somehting other
我真的不喜欢Utils.do_other_stuff()
部分。
如果是实例方法,我会通过self
引用它,但在这里我必须写出完整的类名。
这是@classmethod
使用的好主意,还是过度杀伤? - 或者是否有一些更简洁的方法来编写Utils,可能还有一个模块?
答案 0 :(得分:2)
如果您需要对当前类(可能是子类)的引用,那么一定要使它成为classmethod
。
这不是矫枉过正; Python对绑定类方法所做的工作量与静态方法或常规方法没什么区别。
但是,除非必须,否则不要在此使用课程。 Python不是Java,你不 使用类,函数可以在类之外生活。
答案 1 :(得分:1)
@classmethod
是要走的路:
class Utils:
@classmethod
def do_stuff(cls):
# some stuff
cls.do_other_stuff()
# some more stuff
@classmethod
def do_other_stuff(cls):
# somehting other
只是澄清了与 Martijn Pieters 的评论:我通常会避免使用@staticmethod
而我更喜欢采用@classmethod
因为它允许我引用类及其方法。 (我不同意有关编写具有函数的模块的建议......我是OOP支持者:P)
答案 2 :(得分:1)
Utils
看起来不会被子类化或实例化;它只是静态方法的包装器。在这种情况下,这些方法都可以转换为模块级函数,可能在单独的utils
模块中:
# No class!
def do_stuff():
...
do_other_stuff()
...
def do_other_stuff():
...