oop:Python:静态方法与类方法的区别

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What is the difference between @staticmethod and @classmethod in Python?

我正在学习python中的OOP,了解到这两种方法语法上的不同之处在于,类方法隐式地传递它们所属的类作为它们的第一个参数

1
2
3
4
5
6
7
8
9
10
11
12
class Circle:
  all_circles = [] # class variable

  @staticmethod
  def total_area():
      for c in Circle.all_circles: # hardcode class name
          # do somethig

  @classmethod
  def total_area(cls):
      for c in cls.all_circles: # no hardcode class name
          # do something

我认为类方法更灵活,因为我们不硬编码类

问题:-到底哪一个更好?@staticmethod还是@classmethod ?-这些方法各适用于什么情况?


类方法传递它所调用的类"cls"。更多细节见:Python中的@staticmethod和@classmethod有什么区别?