python---面向对象7--类的继承、重写、super方法

  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     # 两点之间的距离
 28     def distance(self, p2):
 29         return ((self.x - p2.x) ** 2 + (self.y - p2.y) ** 2) ** 0.5
 30 
 31     # 类方法
 32     # 在类中通过装饰器classmethod可以把一个函数定义为类方法
 33     # 给Point类定义一个类方法,用来返回坐标原点
 34     @classmethod
 35     def base_point(cls):
 36         bp = cls(0, 0)
 37         return bp
 38 
 39     # 静态方法
 40     # 在类中通过staticmethod可以把一个函数定义为静态方法
 41     # 静态方法不会接受隐式的第一个函数,它和普通函数一样,只是被封装到类里
 42     # 通过类或是对象都可以调用
 43     @staticmethod
 44     def sum(x, y):
 45         return x + y
 46 
 47 
 48 # 类的继承
 49 # 从现有的类继承,新的类称为子类(subclass)
 50 # 被继承的类称为父类/基类/超类
 51 # 子类可以继承父类的属性和方法
 52 # 创建一个类,来表示三维里的点
 53 class TdPoint(Point):   # 继承只需要把父类放到子类中
 54     """
 55     表示三维的点
 56     """
 57 
 58 
 59 # print(dir(TdPoint))
 60 # print(TdPoint.name)
 61 # print(TdPoint.base_point())
 62 # print(TdPoint.sum(1, 2))
 63 
 64 
 65 # 类的重写
 66 # 在子类中定义同名的方法和属性会覆盖父类的方法和属性
 67 class TdPoint2(Point):
 68     """
 69     表示三维的点
 70     """
 71     def __init__(self, x, y, z):
 72         self.x = x
 73         self.y = y
 74         self.z = z
 75 
 76     def __str__(self):
 77         return '({}, {}, {})'.format(self.x, self.y, self.z)
 78 
 79 
 80 # tp = TdPoint2(1, 2, 3)
 81 # print(tp)
 82 
 83 
 84 # super方法
 85 # 重写了父类的方法,但是又要调用父类的方法
 86 # 例如:三维点在计算点和点的距离时,还要求同时返回这个点投射到二维平面的距离
 87 class TdPoint3(Point):
 88     """
 89     表示三维的点
 90     """
 91     def __init__(self, x, y, z):
 92         self.x = x
 93         self.y = y
 94         self.z = z
 95 
 96     def __str__(self):
 97         return '({}, {}, {})'.format(self.x, self.y, self.z)
 98 
 99     def distance(self, p2):
100         # ds_2 = ((self.x - p2.x) ** 2 + (self.y - p2.y) ** 2) ** 0.5
101         # ds_2 = Point.distance(self, p2)
102         ds_2 = super().distance(p2)
103         ds_3 = ((self.x - p2.x) ** 2 + (self.y - p2.y) ** 2 + (self.z - p2.z) ** 2) ** 0.5
104         return ds_2, ds_3
105 
106 
107 tp1 = TdPoint3(1, 2, 3)
108 tp2 = TdPoint3(2, 3, 4)
109 res = tp1.distance(tp2)
110 print(res)

 

posted @ 2022-03-07 18:28  WJ-HAHA  阅读(57)  评论(0编辑  收藏  举报