类方法和静态方法


01.python中用@classmethod关键字定义类方法。

  • 类方法适用于那些依靠类本身就可以完成功能,而不需要通过实例化获取的场景。
  • 类方法示例:
class Book(object):

    def __init__(self, title):
        self.title = title

    @classmethod
    def create(cls, title):
        book = cls(title=title)
        return book


book1 = Book("python")
book2 = Book.create("python and django")
print(book1.title)
print(book2.title)
  • 类方法中,传入的第一个参数是类本身(cls),而不是实例(self)。
    • 如果使用实例调用,则取当前实例的类。
  • 类方法只要类定义过即可调用,而不需要存在实例对象。
  • 类方法在实例对象中也可以调用,但无法通过类方法操作实例对象。


02.python中用@staticmethod关键字定义静态方法。

  • 静态方法适用于那些受类管理的最简单,基础的方法布局的场景(普通函数)。
    • 静态方法适用于那些不一定需要实例化之后才能进行的工作,比如一些前置的校验或者条件判断等。
  • 静态方法示例:
from math import sqrt


class Triangle(object):

    def __init__(self, side_x, side_y, side_z):
        self.x = side_x
        self.y = side_y
        self.z = side_z

    @staticmethod
    def is_triangle(x, y, z):
        return x + y > z and x + z > y and y + z > x

    def area(self):
        perimeter = self.x + self.y + self.z
        half = perimeter / 2
        return sqrt(half * (half - self.x) * (half - self.y) * (half - self.z))


def main(x, y, z):
    # 判断三条边是否能组成三角形
    if Triangle.is_triangle(x, y, z):
        result = Triangle(x, y, z)
        print(result.area())
    else:
        print('无法构成三角形.')


if __name__ == "__main__":
    main(5, 7, 20)
  • 静态方法在调用时不会隐式的传入参数。
  • 静态方法只表明该方法属于某个名称空间,无其它特殊作用,在python中使用的较少。
文档更新时间: 2021-02-01 22:56   作者:闻骏