这些方法将是"未绑定的"(实质上意味着它们无法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名称空间由模块表示.