使用类方法作为简单函数

Jac*_*des 2 python

我有一个有很多方法的课.如何修改我的方法,以便它们也可以作为函数直接访问而无需创建该类的对象?可能吗.

buk*_*zor 6

这些方法将是"未绑定的"(实质上意味着它们无法self使用).如果函数不在self上运行,则可以将它们转换为静态方法(不接受self第一个参数),然后将它们分配给要像函数一样使用的变量.

像这样:

class MyClass(object):
    @staticmethod
    def myfunc():
        return "It works!"

myfunc = MyClass.myfunc

myfunc() # prints "It works!"
Run Code Online (Sandbox Code Playgroud)

从本质上讲,你需要问自己"我的方法需要哪些数据(呃)功能?" 根据你的答案,你可以使用@staticmethod或者@classmethod你可能发现你确实需要self在这种情况下你需要在尝试使用它的方法之前创建一个对象.

最后一个案例看起来像:

myobj = MyClass()
del MyClass # This is a singleton class
myfunc = myobj.myfunc
Run Code Online (Sandbox Code Playgroud)

除此之外,如果您发现所有方法实际上都是静态方法,那么将它们从类中重构为普通函数是更好的风格,它们实际上已经存在.您可能已经从Java中学习了这种"类作为命名空间"的样式,但这在Python中是不正确的.Python名称空间由模块表示.