python07-面向对象(类和对象)
作者:互联网
一、面向对象概述
二、实例对象内存图
1 """ 2 实例对象内存图 3 练习:exercise01.py 4 """ 5 6 7 class Student: 8 def __init__(self, name, age, score, sex): 9 # 创建实例变量 10 self.name = name 11 self.age = age 12 self.score = score 13 self.sex = sex 14 15 def print_self_info(self): 16 # 读取实例变量 17 print("%s的年龄是%d,成绩是%d,性别是%s" % (self.name, self.age, self.score, self.sex)) 18 19 20 list01 = [ 21 Student("赵敏", 28, 100, "女"), 22 Student("苏大强", 68, 62, "男"), 23 ] 24 25 s01 = list01[0] 26 s01.name = "小赵" 27 s01.score = 98 28 29 print(list01[0].name, list01[0].score) 30 print(list01[1].name, list01[1].score) 31 32 list01[0].print_self_info() # 小赵的年龄是28,成绩是98,性别是女 33 list01[1].print_self_info() # 苏大强的年龄是68,成绩是62,性别是男
三、类成员
1 """ 2 类成员 3 练习:exercise03.py 4 """ 5 6 7 class ICBC: 8 """ 9 工商银行 10 """ 11 # 表示总行的钱 12 total_money = 1000000 13 14 # 因为类方法没有对象地址self,所以不能访问实例成员 15 @classmethod 16 def print_total_money(cls): 17 # print(id(cls),id(ICBC)) 18 print("总行还剩%d钱" % ICBC.total_money) 19 20 def __init__(self, name, money): 21 self.name = name 22 self.money = money 23 # 表示从总行中扣除当前支行使用的金额 24 ICBC.total_money -= money 25 26 i01 = ICBC("广渠门支行", 100000) 27 i02 = ICBC("陶然亭支行", 100000) 28 print("总行还剩%d钱" % ICBC.total_money) 29 30 # 通过类名访问类方法,会将类名传入类方法. 31 ICBC.print_total_money()
四、静态方法:不用实例变量也不用类变量的方法可以定义成静态方法
1 """ 2 静态方法引入 3 """ 4 list01 = [ 5 ["00", "01", "02", "03"], 6 ["10", "11", "12", "13"], 7 ["20", "21", "22", "23"], 8 ] 9 10 class Vector2: 11 """ 12 二维向量 13 可以表示位置/方向 14 """ 15 def __init__(self,x,y): 16 self.x = x 17 self.y = y 18 19 # 函数:表示左边方向 20 def left(): 21 return Vector2(0,-1) 22 23 # 函数:表示右边方向 24 def right(): 25 return Vector2(0,1) 26 27 # 作用:位置 + 方向 28 pos01 = Vector2(1,2) 29 l01 = left() 30 pos01.x += l01.x 31 pos01.y += l01.y 32 print(pos01.x,pos01.y)
1 """ 2 静态方法 3 将函数移到类中. 4 5 总结: 6 实例方法:操作对象的变量 7 类方法:操作类的变量 8 静态方法:即不需要操作实例变量也不需要操作类变量. 9 10 """ 11 12 list01 = [ 13 ["00", "01", "02", "03"], 14 ["10", "11", "12", "13"], 15 ["20", "21", "22", "23"], 16 ] 17 18 19 class Vector2: 20 """ 21 二维向量 22 可以表示位置/方向 23 """ 24 25 def __init__(self, x, y): 26 self.x = x 27 self.y = y 28 29 # 静态方法:表示左边方向 30 @staticmethod 31 def left(): 32 return Vector2(0, -1) 33 34 @staticmethod 35 # 静态方法:表示右边方向 36 def right(): 37 return Vector2(0, 1) 38 39 40 # 作用:位置 + 方向 41 pos01 = Vector2(1, 2) 42 # 通过类名调用静态方法 43 l01 = Vector2.left() 44 pos01.x += l01.x 45 pos01.y += l01.y 46 print(pos01.x, pos01.y) 47 48 49 class DoubleListHelper: 50 # 在二维列表中获取指定位置,指定方向,指定数量的元素. 51 # 例如:list01 "10" 右边 3 --> "11", "12", "13" 52 # 例如:list01 Vector2(1, 0) Vector2.right() 3 --> "11", "12", "13" 53 @staticmethod 54 def get_elements(target, vect_pos, vect_dir, count): 55 """ 56 在二维列表中获取指定位置,指定方向,指定数量的元素. 57 :param target: 二维列表 58 :param vect_pos: 指定位置 59 :param vect_dir: 指定方向 60 :param count: 指定数量 61 :return: 列表 62 """ 63 list_result = [] 64 for i in range(count): 65 vect_pos.x += vect_dir.x 66 vect_pos.y += vect_dir.y 67 element = target[vect_pos.x][vect_pos.y] 68 list_result.append(element) 69 return list_result 70 71 72 re = DoubleListHelper.get_elements(list01, Vector2(1, 0), Vector2.right(), 3) 73 print(re) 74 75 # 例如:list01 "23" 左边 2 76 re = DoubleListHelper.get_elements(list01, Vector2(2, 3), Vector2.left(), 2) 77 print(re)
标签:面向对象,对象,money,self,list01,python07,print,Vector2,def 来源: https://www.cnblogs.com/libotao/p/12489348.html