本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
What is the difference between @staticmethod and @classmethod in Python?
我有几个关于静态方法的问题。我将以一个例子开始。
一个例子:
1 2 3 4 5 6 7 8 9 10 11 12 | class Static: def __init__(self, first, last): self.first = first self.last = last self.age = randint(0, 50) def printName(self): return self.first + self.last @staticmethod def printInfo(): return"Hello %s, your age is %s" % (self.first + self.last, self.age) x = Static("Ephexeve","M").printInfo() |
输出:
1 2 3 4 5 6 | Traceback (most recent call last): File"/home/ephexeve/Workspace/Tests/classestest.py", line 90, in <module> x = Static("Ephexeve","M").printInfo() File"/home/ephexeve/Workspace/Tests/classestest.py", line 88, in printInfo return"Hello %s, your age is %s" % (self.first + self.last, self.age) NameError: global name 'self' is not defined |
两个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Static: def __init__(self, first, last): self.first = first self.last = last self.age = randint(0, 50) def printName(self): return self.first + self.last @staticmethod def printInfo(first, last, age = randint(0, 50)): print"Hello %s, your age is %s" % (first + last, age) return x = Static("Ephexeve","M") x.printInfo("Ephexeve"," M") # Looks the same, but the function is different. |
输出
1 | Hello Ephexeve M, your age is 18 |
我看我不能召唤任何自我。属性,我只是不确定什么时候以及为什么要使用它。在我看来,如果您创建一个带有几个属性的类,您可能希望以后使用它们,而不是使用一个所有属性都不可调用的静态方法。有人能解释一下吗?Python是我的第一个编程语言,所以如果在Java中也是这样,我就不知道了。
你想用那个
或者您只是想看看
在任何情况下,将
这是通过简单地不将实例传递给静态方法来实现的,因此静态方法没有
静态方法很少是必需的,但偶尔也很方便。它们实际上与类外部定义的简单函数相同,但是将它们放在类中会将它们标记为与类"关联"。您通常会使用它们来计算或执行与类密切相关的操作,但实际上并不是对某个特定对象的操作。