python继承

手把手教你用Python实现“坦克大战”,附详细代码!

冷暖自知 提交于 2020-01-07 19:16:44
小时候玩的“坦克大战”,你还记得吗? ​ 满满的回忆 ! 今天,我们使用Python以及强大的第三方库来实现一个简单的坦克大战游戏。 ​ 整体效果 环境依赖 python3.7 pygame1.9.6 urllib 内置库,如random、sys、time、os等 pygame介绍 Pygame被设计用来写游戏的python模块集合,基于SDL库开发。使用python可以导入pygame来开发具有全部特性的游戏和多媒体软件,Pygame是极度轻便的并且可以运行在几乎所有的平台和操作系统上。 1. 导入依赖 & 通用配置 1import random 2import sys 3import time 4from urllib.request import urlretrieve 5import os 6import pygame 7 8 9SCREEN_WIDTH, SCREEN_HEIGHT = 1200, 700 # 画面大小 10MY_BIRTH_LEFT, MY_BIRTH_TOP = SCREEN_WIDTH / 2, SCREEN_HEIGHT - 60 11DIRECTION = [U, D, L, R] = [ U , D , L , R ] # 控制键 12Tank_IMAGE_POSITION = r D:/tank_img 13URL = https:/

Python语法速查: 8. 类与对象

最后都变了- 提交于 2020-01-07 19:16:34
/*--> */ /*--> */ 返回目录 本篇索引 (1) 类基本用法 (2) 类的进阶知识 (3) 类继承 (4) property (5) 描述符 (6) __slots__ (7) 元类 (1)类基本用法 使用面向对象编程有3个重要的好处:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)。 Python中所有的类都是继承自object类(Python2中要使用__metaclass__=type声明,Python3中不用考虑),它提供了一些常用的方法(如__str__()等)的默认实现,在使用中可以不显式指出object。 因此以下三种定义类的方法都是可以的: class MyClass(object): pass class MyClass(): pass class MyClass: pass ● 类中的成员 供所有实例共享的变量称为“类变量”(class variables)。类的每个实例各自有的成员变量称为“特性”(attribute);而“属性”(property)有另外的含义,后面会详述。 由于以前Java中“属性”这个名词太深入人心,因此在不引起歧义的情况下,也常常把“特性”叫为属性。 类中定义的函数分为三种:实例方法(绑定方法)、类方法、静态方法。 以下为类中各种成员的定义: class Foo: a =

深入理解python中抽象类的概念

心已入冬 提交于 2020-01-07 08:21:43
1什么是抽象类 抽象类是一个特殊的类,只能被继承,不能实例化 2为什么只能被继承,不能实例化 有个例子很好地说明了这点。 我们可以构造香蕉、苹果、梨之类的类,然后让它们继承水果这个的基类,水果的基类包含一个eat函数。 但是你有没有想过,我们可以将香蕉、苹果、梨实例化,去吃香蕉、苹果、梨。但是我们却不能将水果实例化,因为我们无法吃到叫水果的这个东西。 所以抽象类中只能有抽象方法(没有实现功能),该类不能被实例化,只能被继承,且子类必须实现抽象方法。 3为什么要有抽象类的存在 抽象类约束子类实现抽象方法,在不同的模块中通过抽象基类来调用,可以用最精简的方式展示出代码之间的逻辑关系,让模块之间的依赖清晰简单。 4一段代码理解抽象类的完整用法: import abc class ChouxiangleiA(metaclass=abc.ABCMeta): # 这里的ChouxiangleiA就是抽象类,必须指定abc模块中的元类ABCMeta @abc.abstractmethod # 定义抽象方法,这里的写法是固定的, def abstract_method(self): """子类中必须定个抽象类中的方法,这里固定用pass""" pass class B(ChouxiangleiA): # B作为抽象类ChouxiangleiA的子类,必须定义抽象方法 def abstract

这26个为什么,让初学者理解Python更简单!

柔情痞子 提交于 2020-01-07 04:13:50
为什么Python使用缩进来分组语句? 为什么简单的算术运算得到奇怪的结果? 为什么浮点计算不准确? 为什么Python字符串是不可变的? 为什么必须在方法定义和调用中显式使用“self”? 为什么不能在表达式中赋值? 为什么Python对某些功能(例如list.index())使用方法来实现,而其他功能(例如len(List))使用函数实现? 为什么 join()是一个字符串方法而不是列表或元组方法? 异常有多快? 为什么Python中没有switch或case语句? 难道不能在解释器中模拟线程,而非得依赖特定于操作系统的线程实现吗? 为什么lambda表达式不能包含语句? 可以将Python编译为机器代码,C或其他语言吗? Python如何管理内存? 为什么CPython不使用更传统的垃圾回收方案? CPython退出时为什么不释放所有内存? 为什么有单独的元组和列表数据类型? 列表是如何在CPython中实现的? 字典是如何在CPython中实现的? 为什么字典key必须是不可变的? 为什么 list.sort() 没有返回排序列表? 如何在Python中指定和实施接口规范? 为什么没有goto? 为什么原始字符串(r-strings)不能以反斜杠结尾? 为什么Python没有属性赋值的“with”语句? 为什么 if/while/def/class语句需要冒号?

Python在运行中发生错误怎么正确处理方法,案例详解!

醉酒当歌 提交于 2020-01-07 02:08:22
在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因。在操作系统提供的调用中,返回错误码非常常见。比如打开文件的函数open(),成功时返回文件描述符(就是一个整数),出错时返回-1。 用错误码来表示是否出错十分不便,因为函数本身应该返回的正常结果和错误码混在一起,造成调用者必须用大量的代码来判断是否出错: def foo(): r = some_function() if r==(-1): return (-1) # do something return r def bar(): r = foo() if r==(-1): print(‘Error’) else: pass 如果你觉得看这些理论知识乏味不够形象,可以进他们的Python技术扣扣裙【278136312】 裙公告里面有讲的非常详细的完整版Python入门到实战+笔记+源码+作业视频教程免费下载,生动的讲解可以让你思路更清晰,遇到问题里面有大佬解答, 一旦出错,还要一级一级上报,直到某个函数可以处理该错误(比如,给用户输出一个错误信息)。 所以高级语言通常都内置了一套try…except…finally…的错误处理机制,Python也不例外。 try 让我们用一个例子来看看try的机制: try: print(‘try…’) r = 10 / 0 print(

使用@property与getter和setter

自闭症网瘾萝莉.ら 提交于 2020-01-06 17:14:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这是一个纯Python特定的设计问题: class MyClass(object): ... def get_my_attr(self): ... def set_my_attr(self, value): ... 和 class MyClass(object): ... @property def my_attr(self): ... @my_attr.setter def my_attr(self, value): ... Python让我们可以用任何一种方式来做。 如果要设计Python程序,将使用哪种方法,为什么? #1楼 在大多数情况下,我都不想使用两者。 属性的问题在于它们使类不那么透明。 特别是,如果您要向设置员提出例外情况,这将是一个问题。 例如,如果您具有Account.email属性: class Account(object): @property def email(self): return self._email @email.setter def email(self, value): if '@' not in value: raise ValueError('Invalid email address.') self._email = value

python内置函数(三)

僤鯓⒐⒋嵵緔 提交于 2020-01-06 13:21:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> map() 函数 描述 map() 会根据提供的函数对指定序列做映射。 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。 语法 map(function, iterable, ...) 参数 function -- 函数 iterable -- 一个或多个序列 返回值 Python 2.x 返回列表。 Python 3.x 返回迭代器。 >>>def square(x) : # 计算平方数 ... return x ** 2 ... >>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方 [1, 4, 9, 16, 25] >>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数 [1, 4, 9, 16, 25] # 提供了两个列表,对相同位置的列表数据进行相加 >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]) [3, 7, 11, 15, 19] range() 函数 python range() 函数可创建一个整数列表,一般用在 for 循环中。

记录一些python内置函数

夙愿已清 提交于 2020-01-06 01:02:46
整理一些内置函数,平时用得比较少,但是时不时遇上,记录一下吧(嘻嘻(●'◡'●)) 1.help() 查看模块or函数的帮助文档 help(pandas) #模块 Help on package pandas: NAME pandas DESCRIPTION pandas - a powerful data analysis and manipulation library for Python ===================================================================== **pandas** is a Python package providing fast, flexible, and expressive data structures designed to make working with "relational" or "labeled" data both easy and intuitive. It aims to be the fundamental high-level building block for doing practical, **real world** data analysis in Python. Additionally, it has the broader goal

Python性能提升小技巧

独自空忆成欢 提交于 2020-01-04 03:42:33
第一部分 1-使用内建函数: 你可以用Python写出高效的代码,但很难击败内建函数. 经查证. 他们非常快速 2-使用 join() 连接字符串. 你可以使用 + 来连接字符串. 但由于string在Python中是不可变的,每一个 + 操作都会创建一个新的字符串并复制旧内容. 常见用法是使用Python的数组模块单个的修改字符;当完成的时候,使用 join() 函数创建最终字符串. >>> #This is good to glue a large number of strings >>> for chunk in input(): >>> my_string.join(chunk) 3-使用Python多重赋值,交换变量 这在Python中即优雅又快速: >>> x, y = y, x 这样很慢: >>> temp = x >>> x = y >>> y = temp 4-尽量使用局部变量 Python 检索局部变量比检索全局变量快. 这意味着,避免 "global" 关键字. 5-尽量使用 in 使用 in 关键字. 简洁而快速. >>> for key in sequence: >>> print “found” 6-使用延迟加载加速 將 import 声明移入函数中,仅在需要的时候导入. 换句话说,如果某些模块不需马上使用,稍后导入他们. 例如

python-01-python简介

冷暖自知 提交于 2020-01-04 03:12:35
目标 ●Python 的起源 ●为什么要用Python? ●Python 的特点 ●Python 的优缺点 01. Python的起源 Python的创始人为吉多范罗苏姆(Guido van Rossum) 1.1989年的圣诞节期间,吉多范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序, 作为ABC语言的-种继承(感觉下什么叫牛人) 2.ABC是由吉多参加设计的一种教学语言,就吉多本人看来,ABC这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,吉多认为是非开放造成的。吉多决心在Python中避免这一错误,并获取了非常好的效果 3.之所以选中Python (蟒蛇)作为程序的名字,是因为他是BBC电视剧- -蒙提派森的飞行马戏团(Monty Python’s Flying Circus)的爱好者 4.1991年,第一个Python解释器诞生,它是用C语言实现的,并能够调用C语言的库文件 1.1解释器(科普) 计算机不能直接理解任何除机器语言以外的语言,所以必须要把程序员所写的程序语言翻译成机器语言,计算机才能执行程序。将其他语言翻译成机器语言的工具,被称为编译器 编译器翻译的方式有两种: 一个是编译,另外一个是解释。两种方式之间的区别在于翻译时间点的不同。当编译器以解释方式运行的时候,也称之为解释器 编译型语言 :