class TestClass:
def __init__(self, size):
self.size = size
def instance(self):
print("regular instance method - with 'self'")
@staticmethod
def static():
print("static instance method - with @staticmethod")
def static_class():
print("static class method")
a = TestClass(1000)
a.instance()
a.static()
TestClass.static_class()
这段代码运行正确,没有返回任何错误。我的问题是:
我是否理解"self"的含义为:“这个方法将从一个实例中被调用”?
那么,@staticmethod背后的逻辑是什么 - 是创建可从实例中调用的静态方法吗?这难道不正是静态方法的作用吗?
为什么第二种方法比第三种更受欢迎呢?(我假设由于装饰器的存在,这是有意义的。)第三个选项似乎更简单和直接。
a.static_class()
在任何版本中都无法使用。 - jonrsharpeTestClass.static()
和a.static_class()
添加到您的测试用例中,并观察发生了什么。这可能有助于说明为什么@staticmethod
很有用。 - Graham Dumpletoncls.whatever()
和self.whatever()
将正确工作,使您可以将类名保留在类和实例方法之外,并正确处理继承。 - jonrsharpe