python---面向对象6--静态方法
1 # 创建一个类 2 class Point: 3 """ 4 表示平面坐标系里的一个点 5 """ 6 name = '点' # 类属性 7 8 # 魔术/特殊方法,有特殊功能的方法,都以双下划线开头 9 # __init__, 初始化方法,构造方法,对象属性一般定义在这里 10 # 当创建对象的时候它会被自动调用,创建对的对象会被传递给第一个参数 11 # 会接受类名括号里传入的参数(从第二个参数开始传 ) 12 def __init__(self, x, y): 13 print('我执行了这一段初始化代码') 14 self.x = x 15 self.y = y 16 17 # __str__ 18 # 定义对象被print的时候的字符串形式 19 # print一个对象的时候,实际上会调用这个对象的__str__方法,打印这个方法的返回值 20 def __str__(self): 21 return '({}, {})'.format(self.x, self.y) 22 23 # 定义在类里的普通函数就是对象方法 24 def my_point(self): 25 print('({}, {})'.format(self.x, self.y)) 26 27 def distance(self, p2): 28 return ((self.x - p2.x) ** 2 + (self.y - p2.y) ** 2) ** 0.5 29 30 # 类方法 31 # 在类中通过装饰器classmethod可以把一个函数定义为类方法 32 # 给Point类定义一个类方法,用来返回坐标原点 33 @classmethod 34 def base_point(cls): 35 bp = cls() 36 bp.x = 0 37 bp.y = 0 38 return bp 39 40 # 静态方法 41 # 在类中通过staticmethod可以把一个函数定义为静态方法 42 # 静态方法不会接受隐式的第一个函数,它和普通函数一样,只是被封装到类里 43 # 通过类或是对象都可以调用 44 @staticmethod 45 def sum(x, y): 46 return x + y 47 48 49 # 通过类调用 50 res = Point.sum(1, 2) 51 print(res) 52 53 # 通过对象调用 54 # 由于__init__的原因,创建对象的时候它会被自动调用 55 # 所以在创建对象时要有传参 56 p = Point(1, 6) 57 res = p.sum(3, 5) 58 print(res)