C3算法与MRO序列
- 面向对象编程的进阶部分:继承与多态
当前类 最底层D的未查找的父类列表 预查找的父类 预查找父类是否是object 预查找父类是否还有的子类? 同时又是底层查找类的父类 实际取出的类
D C1, C2, C3 C1 - - C1
C1 C2, C3 B1 - 有,C2 C2
C2 C3 B1 - - B1
B1 C3 A1 - - A1
A1 C3 object 是,但最底层D还有父类C3未取出 - C3
C3 - B2 - - B2
B2 - A2 - 是,B3 B3
B3 - A2 - - A2
A2 - object 是,最底层D已经没有父类未取出了 是,A3 A3
A3 - object 是 - object
————————————————
原文链接https://blog.csdn.net/u011467553/article/details/81437780
map函数
map是python内置函数,会根据提供的函数对指定的序列做映射。
map()函数的格式是:map(function,iterable,...)
第一个参数接受一个函数名,后面的参数接受一个或多个可迭代的序列,返回的是一个集合。
把函数依次作用在list中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。
https://blog.csdn.net/quanlingtu1272/article/details/95482253?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163323999716780366556922%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=163323999716780366556922&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-95482253.first_rank_v2_pc_rank_v29&utm_term=map%E5%87%BD%E6%95%B0&spm=1018.2226.3001.4187
抽象基类@abc.abstractmethod
抽象基类我们通过一些装饰器或者特殊的方法来把类里的方法虚化,虚化后的方法不能通过当前类调用,必须使用子类继承并且实现该方法才能调用该方法
而@abc.abstractmethod是我们用来虚化方法的装饰器
如果父类使用了@abc.abstractmethod装饰器,而子类没有将每一个父类重写都会报错,抽象基类也是这个原理
Python2和Python3中@abstractmethod的用法
pygame初始
- 基于tkinter模块的GUI
GUI是图形用户界面的缩写,图形化的用户界面对使用过计算机的人来说应该都不陌生,在此也无需进行赘述。Python默认的GUI开发模块是tkinter(在Python 3以前的版本中名为Tkinter),从这个名字就可以看出它是基于Tk的,Tk是一个工具包,最初是为Tcl设计的,后来被移植到很多其他的脚本语言中,它提供了跨平台的GUI控件。当然Tk并不是最新和最好的选择,也没有功能特别强大的GUI控件,事实上,开发GUI应用并不是Python最擅长的工作,如果真的需要使用Python开发GUI应用,wxPython、PyQt、PyGTK等模块都是不错的选择。
基本上使用tkinter来开发GUI应用需要以下5个步骤:
导入tkinter模块中我们需要的东西。
创建一个顶层窗口对象并用它来承载整个GUI应用。
在顶层窗口对象上添加GUI组件。
通过代码将这些GUI组件的功能组织起来。
进入主事件循环(main loop)。
使用Pygame进行游戏开发
Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平台的多媒体开发库,用C语言实现,被广泛的应用于游戏、模拟器、播放器等的开发。而Pygame让游戏开发者不再被底层语言束缚,可以更多的关注游戏的功能和逻辑。
from enum import Enum, unique
from math import sqrt
from random import randint
import pygame
@unique
class Color(Enum):
“”“颜色”""
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
GRAY = (242, 242, 242)
@staticmethod
def random_color():
"""获得随机颜色"""
r = randint(0, 255)
g = randint(0, 255)
b = randint(0, 255)
return (r, g, b)
class Ball(object):
“”“球”""
def __init__(self, x, y, radius, sx, sy, color=Color.RED):
"""初始化方法"""
self.x = x
self.y = y
self.radius = radius
self.sx = sx
self.sy = sy
self.color = color
self.alive = True
def move(self, screen):
"""移动"""
self.x += self.sx
self.y += self.sy
if self.x - self.radius <= 0 or \
self.x + self.radius >= screen.get_width():
self.sx = -self.sx
if self.y - self.radius <= 0 or \
self.y + self.radius >= screen.get_height():
self.sy = -self.sy
def eat(self, other):
"""吃其他球"""
if self.alive and other.alive and self != other:
dx, dy = self.x - other.x, self.y - other.y
distance = sqrt(dx ** 2 + dy ** 2)
if distance < self.radius + other.radius \
and self.radius > other.radius:
other.alive = False
self.radius = self.radius + int(other.radius * 0.146)
def draw(self, screen):
"""在窗口上绘制球"""
pygame.draw.circle(screen, self.color,
(self.x, self.y), self.radius, 0)
def main():
# 定义用来装所有球的容器
balls = []
# 初始化导入的pygame中的模块
pygame.init()
# 初始化用于显示的窗口并设置窗口尺寸
screen = pygame.display.set_mode((800, 600))
# 设置当前窗口的标题
pygame.display.set_caption(‘大球吃小球’)
running = True
# 开启一个事件循环处理发生的事件
while running:
# 从消息队列中获取事件并对事件进行处理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
# 处理鼠标事件的代码
if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1:
# 获得点击鼠标的位置
x, y = event.pos
radius = randint(10, 100)
sx, sy = randint(-10, 10), randint(-10, 10)
color = Color.random_color()
# 在点击鼠标的位置创建一个球(大小、速度和颜色随机)
ball = Ball(x, y, radius, sx, sy, color)
# 将球添加到列表容器中
balls.append(ball)
screen.fill((255, 255, 255))
# 取出容器中的球 如果没被吃掉就绘制 被吃掉了就移除
for ball in balls:
if ball.alive:
ball.draw(screen)
else:
balls.remove(ball)
pygame.display.flip()
# 每隔50毫秒就改变球的位置再刷新窗口
pygame.time.delay(50)
for ball in balls:
ball.move(screen)
# 检查球有没有吃到其他的球
for other in balls:
ball.eat(other)
if name == ‘main’:
main()
python库的安装
- pip指令
注意python与pip版本的预先检查,指令基本格式为`pip install XX - 手动安装
官网下载后手动存放到相应位置,之后再使用命令行窗口进行安装
参考
python3中pygame安装过程(超级详细)
`