编程语言
首页 > 编程语言> > python07-面向对象(类和对象)

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