类方法和静态方法
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 作者:闻骏