day31 类的组合及继承,文件目录规范
Python之路,Day18 = Python基础18-面向对象继承与组合
类的继承
def talk():
print("I am come from talk..a") class Animal:
def say(self):
print("say") class Person(object):
def __init__(self, name, age):
self.name = name
self.age = age def walk(self):
print("%s is walking..."%self.name) class Teacher(Person):
def say(self):
Animal.say(123)
pass class Student(Person):
def __init__(self, name, age, tuition):
Person.__init__(self, name, age)
self.tuition = tuition def walk(self):
Person.walk(self)
print("I am come from Student...") def talk(self):
talk() # 对象可以调用外面的函数 t = Teacher('zhang', 18)
print(t.name, t.age)
t.walk()
t.say() s = Student('liu', 17, 19800)
print(s.name, s.age)
s.walk()
print(s.tuition) s.talk()
类的组合
class BirthDay(object):
def __init__(self, year, mon, day):
self.year = year
self.mon = mon
self.day = day def tellInfo(self):
print("comes from BirthDay")
return "year:%s mon:%s day:%s"%(self.year, self.mon, self.day) class Teacher(object):
def __init__(self, name, age, sex, birth):
self.name = name
self.age = age
self.sex =sex
self.birth = birth t = Teacher('zhang', 18, 'male', BirthDay(1999, 9, 99)) print(t.birth.tellInfo())
文件目录规范
飞机大战的例子
import time
import pygame
from sys import exit def main(): screen = pygame.display.set_mode((512, 768), 0, 32)
pygame.display.set_caption("飞机大战之类的练习")
pygame.mouse.set_visible(False)
background = pygame.image.load(r".\img\background.jpg")
hero_plan_len = 151
hero_plan_hig = 108 hero_plan = HeroPlan(screen, hero_plan_len, hero_plan_hig)
enemy_plan = EnemyPlan(screen) while True:
screen.blit(background, (0,0)) hero_plan.display()
get_input(hero_plan) enemy_plan.display() pygame.display.update() time.sleep(0.03) class BasePlan:
def __init__(self, screen, x, y):
self.screen = screen
self.x = x
self.y = y
self.buttle = []
self.count = 0 def display(self):
self.move()
self.screen.blit(self.plan, (self.x, self.y))
self.fire() for buttle in self.buttle:
if buttle.clearButtle():
self.buttle.remove(buttle) buttle.move()
buttle.display() def move(self):
pass class HeroPlan(BasePlan):
def __init__(self, screen, lenth, high):
super().__init__(screen, 180, 640)
self.lenth = lenth
self.high = high
self.plan = pygame.image.load(r".\img\hero_plan.png") def fire(self):
if self.count == 2:
self.buttle.append(HeroBullet(self.screen, self.x + 20, self.y - 48))
self.buttle.append(HeroBullet(self.screen, self.x + 105, self.y - 48))
self.count = 0
else:
self.count += 1 class EnemyPlan(BasePlan):
def __init__(self, screen):
super().__init__(screen, 0, 0)
self.direction = "right"
self.plan = pygame.image.load(r".\img\enemy_plan.png") def move(self):
if self.direction == "right":
self.x += 10
elif self.direction == 'left':
self.x -= 10 if self.x <= 0:
self.direction = "right"
elif self.x >= 248:
self.direction = "left" def fire(self):
if self.count == 20:
self.buttle.append(EnemyButtle(self.screen, self.x+40, self.y+160))
self.buttle.append(EnemyButtle(self.screen, self.x+175, self.y+160))
self.count = 0
else:
self.count += 1 class BaseBullet:
def __init__(self, screen, x, y):
self.screen = screen
self.x = x
self.y = y def display(self):
self.screen.blit(self.buttle, (self.x, self.y)) class HeroBullet(BaseBullet):
def __init__(self, screen, x, y):
super().__init__(screen, x, y)
self.buttle = pygame.image.load(r".\img\hero_bullet.png") def move(self):
self.y -= 20 def clearButtle(self):
if self.y < 0:
return True class EnemyButtle(BaseBullet):
def __init__(self, screen, x, y):
super().__init__(screen, x, y)
self.buttle = pygame.image.load(r".\img\enemy_bullet.png") def move(self):
self.y += 10 def clearButtle(self):
if self.y > 714:
return True def get_input(hero_plan):
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit() x, y = pygame.mouse.get_pos()
hero_plan.x = x - hero_plan.lenth/2
hero_plan.y = y - hero_plan.high/2 def key_control(hero_temp): #获取事件,比如按键等
for event in pygame.event.get(): #判断是否是点击了退出按钮
if event.type == QUIT:
print("exit")
exit()
#判断是否是按下了键
elif event.type == KEYDOWN:
#检测按键是否是a或者left
if event.key == K_a or event.key == K_LEFT:
print('left')
hero_temp.move_left()
#检测按键是否是d或者right
elif event.key == K_d or event.key == K_RIGHT:
print('right')
hero_temp.move_right()
#检测按键是否是空格键
elif event.key == K_SPACE:
print('space')
hero_temp.fire() if __name__ == "__main__":
main()
day31 类的组合及继承,文件目录规范的更多相关文章
- python's ninteenth day for me 类的组合,继承。
组合: 表示一个类的对象作为另一个类对象的属性. 实例化的过程: 1,创建一个对象. 2,__init__ 给对象添加一些属性,对象默认的名字为self. 3,将self所指向的内存空间返回给实例化他 ...
- python类与对象的组合与继承
1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景 ...
- Day 23 类的继承,派生,组合,菱形继承,多态与多态性
类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...
- 28-React state提升、组件组合或继承
Lifting State Up state提升 对于在React应用程序中更改的任何数据,应该有一个单一的数据源.通常,都是将state添加到需要渲染的组件.如果其他组件也需要它,您可以将其提升到最 ...
- day25、 静态属性、类方法、静态方法、组合、继承、
一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...
- Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)
1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...
- oc随笔二:组合、继承
在oc中如果没有使用ARC的话,手动管理内存一定要注意处理好“野指针”,通常我们在释放指针的指向的地址时,都要将指针赋值为nil,这样能有效的防止野指针.常用的关键字:retain.assign .s ...
- 《Java程序员面试笔试宝典》之组合与继承有什么区别
组合和继承是面向对象中两种代码复用的方式.组合是指在新类里面创建原有类的对象,重复利用已有类的功能.继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现.组合和继承都允许在新 ...
- c++,类的组合
1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...
随机推荐
- 2018 最新 spring boot 整合 swagger2 (swagger2 版本 2.8.0)
好久没上了, 看到又有人回复了. 我就来修改一下. 修改时间 2018年5月16日 这回给你上全新版本. 至发稿时间,所有的包都是新版. 注意: 高版本需要添加 jaxb-api 包, 否则会报错 ...
- Asp.net Core + Log4net + ELK 搭建日志中心
原文:Asp.net Core + Log4net + ELK 搭建日志中心 Docker中一键安装ELK 对于这种工具类的东西,第一步就直接到docker的hub中查找了,很幸运,不仅有Elasti ...
- Ubuntu下搭建NFS,并在开发板挂载
---恢复内容开始--- zai root huanjingxiachaozhuo $ su 一.搭建NFS 1.执行命令:sudo apt-get install nfs-kernel-server ...
- laydate日期插件弹出闪退和多次闪退问题解决
情况:点击第一个input 日期,可以正常选择日期,之后点击任何一个,都会闪一下然后消失,无法正常选择: 原因:lay-key的值的问题,需要循环重新为lay-key赋值 解决: <input ...
- 转 直接在浏览器运行Python代码
到这个链接将代码下载到本地,然后打开cmd,使用python运行此文件,然后不要关闭窗口: https://raw.githubusercontent.com/michaelliao/learn-py ...
- lombok @Builder实现原理
public class Person { private Person(Builder builder) { name = builder.name; age = builder.age; } pr ...
- C++11中的技术剖析(萃取技术)
从C++98开始萃取在泛型编程中用的特别多,最经典的莫过于STL.STL中的拷贝首先通过萃取技术识别是否是已知并且支持memcpy类型,如果是则直接通过内存拷贝提高效率,否则就通过类的重载=运算符,相 ...
- 更强大的实时数仓构建能力!分析型数据库PostgreSQL 6.0新特性解读
阿里云 AnalyticDB for PostgreSQL 为采用MPP架构的分布式集群数据库,完备支持SQL 2003,部分兼容Oracle语法,支持PL/SQL存储过程,触发器,支持标准数据库事务 ...
- MaxCompute表设计最佳实践
MaxCompute表设计最佳实践 产生大量小文件的操作 MaxCompute表的小文件会影响存储和计算性能,因此我们先介绍下什么样的操作会产生大量小文件,从 而在做表设计的时候考虑避开此类操作. 使 ...
- 字符串dp——牛客多校第五场G
比赛的时候脑瘫了没想出来..打多校以来最自闭的一场 显然从s中选择大于m个数组成的数必然比t大,所以只要dp求出从s中选择m个数大于t的方案数 官方题解是反着往前推,想了下反着推的确简单,因为高位的数 ...