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 类的组合及继承,文件目录规范的更多相关文章

  1. python's ninteenth day for me 类的组合,继承。

    组合: 表示一个类的对象作为另一个类对象的属性. 实例化的过程: 1,创建一个对象. 2,__init__ 给对象添加一些属性,对象默认的名字为self. 3,将self所指向的内存空间返回给实例化他 ...

  2. python类与对象的组合与继承

    1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景 ...

  3. Day 23 类的继承,派生,组合,菱形继承,多态与多态性

    类的继承 继承是一种新建类的方式,新建的类称为子类,被继承的类称为父类 继承的特性是:子类会遗传父类的属性 继承是类与类之间的关系 为什么用继承 使用继承可以减少代码的冗余 对象的继承 python中 ...

  4. 28-React state提升、组件组合或继承

    Lifting State Up state提升 对于在React应用程序中更改的任何数据,应该有一个单一的数据源.通常,都是将state添加到需要渲染的组件.如果其他组件也需要它,您可以将其提升到最 ...

  5. day25、 静态属性、类方法、静态方法、组合、继承、

    一. 静态属性.类方法.静态方法 1.1静态属性 class Room: def __init__(self,name,owner,width,length): self.name=name self ...

  6. Java(Android)编程思想笔记02:组合与继承、final、策略设计模式与适配器模式、内部类、序列化控制(注意事项)

    1.组合和继承之间的选择 组合和继承都允许在新的类中放置子对象,组合是显式的这样做,而继承则是隐式的做. 组合技术通常用于想在新类中使用现有类的功能而非它的接口这种情形.即在新类中嵌入某个对象,让其实 ...

  7. oc随笔二:组合、继承

    在oc中如果没有使用ARC的话,手动管理内存一定要注意处理好“野指针”,通常我们在释放指针的指向的地址时,都要将指针赋值为nil,这样能有效的防止野指针.常用的关键字:retain.assign .s ...

  8. 《Java程序员面试笔试宝典》之组合与继承有什么区别

    组合和继承是面向对象中两种代码复用的方式.组合是指在新类里面创建原有类的对象,重复利用已有类的功能.继承是面向对象的主要特性之一,它允许设计人员根据其它类的实现来定义一个类的实现.组合和继承都允许在新 ...

  9. c++,类的组合

    1. 在A类中以B类的对象作为成员变量,称为类的组合(composition). 可以先看看这篇文章理解组合的用处: C++中组合的使用 http://blog.csdn.net/jia_xiaoxi ...

随机推荐

  1. BigDecimal的操作工具类

    import java.math.BigDecimal; /** * 进行BigDecimal对象的加减乘除,四舍五入等运算的工具类 * @author ameyume * */ public cla ...

  2. 使用Postman模拟HTTP请求

    使用Postman模拟HTTP请求 Postman是一款强大的前端调试工具,不管是开发人员还是测试人员都会需要调试接口程序,如RestAPI,此时可以通过向服务器发送不同的HTTP请求来判断接口返回结 ...

  3. Linux 父子进程实现复制文件内容到另一个文件内

    1. 子进程先拷贝前一半 ,父进程一直阻塞到子进程拷贝完再拷贝后一半 /* 子进程先拷贝前一半文件,父进程先阻塞等待子进程拷贝完前一半内容, * 然后父进程在拷贝,后一半内容 * */ #includ ...

  4. 15_TLB中的G属性

    > TLB 是为了增加访问内存的效率 即 如果 是 29 9 12 分页 请求数据 可能需要访问 4次内存:为了解决这个问题:出现了 TLB (虚拟地址到物理地址的转换关系),如果目标地址在TL ...

  5. line-height 行高的使用

    line-height:normal; 默认  字体 line-height:1.5; line-height:200%; line-height:50px;  ps : 固定的值 line-heig ...

  6. webpack4.0基础

    安装 yarn add webpack webpack-cli -D npx webpack index.js 图片 file-loader module: { rules: [ { test: /\ ...

  7. 开放应用模型(OAM):全球首个云原生应用标准定义与架构模型

    Kubernetes 项目作为容器编排领域的事实标准, 成功推动了诸如阿里云 Kubernetes (ACK)等云原生服务的迅速增长.但同时我们也关注到,Kubernetes 的核心 API 资源比如 ...

  8. thinkphp自动创建目录

    自动创建目录 在第一次访问应用入口文件的时候,会显示如图所示的默认的欢迎页面,并自动生成了一个默认的应用模块Home. 接下来再看原来空的Application目录下面,已经自动生成了公共模块Comm ...

  9. PHP PDO 大对象 (LOBs)

    应用程序在某一时刻,可能需要在数据库中存储"大"数据. "大"通常意味着"大约 4kb 或以上",尽管某些数据库在数据达到"大&q ...

  10. Python Django主机管理

    1.新建一个django project项目 django-admin startproject DjangoWeb 2.新建app python manage.py startapp master ...