python(转)

mac2026-04-09  4

一、面向对象三大特征

封装继承多态 重载重写 class allStr(): ''' 父类 ''' all_worlds = 'helle python' other_world = "人生苦短,我学Python" def all_print(self): '''打印其他的话''' print(self.other_world) # 调用自己的类变量 class myStr(allStr): '''子类''' def my_print(self): '''打印我的话''' print(allStr.all_worlds) # 调用父类变量 # 初始化类对象 my_str = myStr() # 调用类方法 my_str.my_print() # 调用父类方法 my_str.all_print() # 企图外部直接修改父类变量 my_str.all_worlds = '哈哈哈哈啊哈' # 调用类方法 my_str.my_print() helle python 人生苦短,我学Python helle python # 有继承关系的是重写,没有的是重装 class ALLStr: all_words = "你好,syd" my_worlds = "哈哈哈" def print_str(self): print(self.all_words) class MyStr(ALLStr): """子类""" def print_str(self): """重写父类方法""" print("不太好!") def print_me(self): """属于自己的方法""" print("人生苦短,我学Python!") def print_me(self, your_worlds): """重载自己的类方法""" print(your_worlds) # 初始化对象 my_str = MyStr() # 调用重写的类方法 my_str.print_str() # 调用自己的类方法***重载后之前的方法不可用 your_worlds = "hahah" my_str.print_me(your_worlds) # **** 重载不常用 不太好! hahah

二、生命游戏

""" 二维矩阵类 """ # 文件名matrix2d.py class Matrix2D: """通用的二维矩阵类""" def __init__(self, rows, cols): """初始化矩阵row行,col列""" self.grid = [[0]*cols for _ in range(rows)] self.rows = rows self.cols = cols def get_cell(self, r, c): """获取单元格(r,c)的值""" return self.grid[r][c] def set_cell(self, n, *args): """设置某个位置的值""" for r, c in args: self.grid[r][c] = n def inc_cells(self, *args): """将任意单元格 +1 """ for r, c in args: self.grid[r][c] += 1 def set_all_cells(self, n=0): """将所有单元格值都设为 n """ for i in range(self.rows): for j in range(self.cols): self.grid[i][j] = n """ 生命游戏 """ # 文件名mian.py from matrix2d import Matrix2D rows = 5 cols = 5 # 存储图符号的二维数组 life_mat = Matrix2D(rows,cols) # 存储具体数据的二维数组 nc_mat = Matrix2D(rows,cols) # 初始化 life_mat.set_cell(1, (1,3), (2,1), (2,3), (3,2), (3,3)) # 创建边界字符串 border_str = ' _ ' * cols def get_mat_str(a_mat): """处理打印字符串""" disp_str = '' for i in range(rows): lst = [get_chr(a_mat,i,j) for j in range(cols)] disp_str += ''.join(lst) + '\n' return disp_str def get_chr(a_mat, r, c): """设置图符号""" return ' 1 ' if a_mat.get_cell(r,c) > 0 else ' 0 ' def do_generation(): """打印当前状态并生成下个状态""" # 打印当前生命矩阵状态 print(border_str + '\n' + get_mat_str(life_mat)) # 把数据全部置0 nc_mat.set_all_cells(0) # 根据图符号矩阵life_mat 来给nc_mat赋值 for i in range(rows): for j in range(cols): if life_mat.get_cell(i, j): # 环绕图像,使有限的二维数组变成没有边界的生命游戏 im = (i - 1) % rows ip = (i + 1) % rows jm = (j - 1) % cols jp = (j + 1) % cols # 设置数据量为1,表示有活细胞 nc_mat.inc_cells((im, jm), (im, j),(im,jp),(i,jm),(i,jp),(ip,jm),(ip,j),(ip,jp)) # 根据邻居数量矩阵按规则生成下一代 for i in range(rows): for j in range(cols): n = nc_mat.get_cell(i, j) if n < 2 or n > 3: # 死亡现象 life_mat.set_cell(0,(i, j)) elif n == 3: # 繁殖现象 life_mat.set_cell(1,(i, j)) import time n = 100 for i in range(n): # 循环调用迭代 do_generation() # 设置时间间隔 time.sleep(1) --------------------------------------------------------------------------- ModuleNotFoundError Traceback (most recent call last) <ipython-input-16-d18dab4842fa> in <module> 4 # 文件名mian.py 5 ----> 6 from matrix2d import Matrix2D 7 8 rows = 5 ModuleNotFoundError: No module named 'matrix2d'

三、装饰器

最新回复(0)