[ python ] 类的组合
首先,使用面向对象是一个人狗大战的实例:
class Person:
def __init__(self, name, hp, aggr, sex):
self.name = name
self.hp = hp
self.aggr = aggr
self.sex = sex
def hit(self, dog):
dog.hp -= self.aggr
print('\033[31;1m%s被打,掉了%s的血.\033[0m' %(dog.name, self.aggr)) class Dog:
def __init__(self, name, hp, aggr, kind):
self.name = name
self.hp = hp
self.aggr = aggr
self.kind = kind
def bite(self, person):
person.hp -= self.aggr
print('\033[31;1m%s被咬,掉了%s的血.\033[0m' %(person.name, self.aggr)) per = Person('kk', 100, 2, 'male')
dog = Dog('teddy', 200, 5, 'teddy') per.hit(dog)
dog.bite(per)
这时,为了增加游戏的趣味性,我们可以给人物添加一个武器,并且人物可以使用武器发大招:
- 新增武器类;
- 武器必须给人类装配上才能用;
- 大招是武器发动的,因此大招应该是武器的一个方法
- 人类拿着武器发起大招,应该是: 人类.武器.大招
接下来,就将描述转换为代码:
class Person:
'''人类''' def __init__(self, name, hp, aggr, sex):
self.name = name
self.hp = hp
self.aggr = aggr
self.sex = sex
self.price = 0 # 设置人类初始金钱 def hit(self, dog):
dog.hp -= self.aggr
print('\033[31;1m%s被打,掉了%s的血.\033[0m' % (dog.name, self.aggr)) def get_weapon(self, weapon):
'穿戴武器'
if self.price > weapon.price: # 购买武器
self.price -= weapon.price
self.weapon = weapon # 带上武器 class Dog:
'''狗类''' def __init__(self, name, hp, aggr, kind):
self.name = name
self.hp = hp
self.aggr = aggr
self.kind = kind def bite(self, person):
person.hp -= self.aggr
print('\033[31;1m%s被咬,掉了%s的血.\033[0m' % (person.name, self.aggr)) class Weapon:
def __init__(self, name, aggr, njd, price):
self.name = name
self.aggr = aggr
self.njd = njd
self.price = price def dazhao(self, dog):
if self.njd > 0:
dog.hp -= self.aggr * 2
print('\033[33;1m【%s】使用武器【%s】,发大招伤害【%s】\033[0m' % (dog.name, self.name, self.aggr * 2)) per = Person('kk', 100, 2, 'male')
dog = Dog('teddy', 200, 5, 'teddy') per.hit(dog)
dog.bite(per)
hit_dog = Weapon('dbg', 20, 3, 998) # 实例化一个武器对象-打狗棒
per.price += 998 # 冲钱才能变强
per.get_weapon(hit_dog) # 人物装备上武器
per.weapon.dazhao() # 人物使用武器发大招
在上面的这个例子中,我们已经使用到了类的组合。
当人物需要发大招的时候,人物通过 get_weapon 方法绑定武器,self.weapon 就是武器,而大招是武器中的一个方法,因此使用:
人物.武器.大招() 这样的调用关系才能使用大招。
组合就是一个对象的属性值是另一个类的对象
练习:
使用类的组合创建讲师类,有两个类 Teacher 和 brith 类
#!/usr/bin/python3
# -*- coding: utf-8 -*-
# Author: hkey class Teacher:
def __init__(self, name, age, brith):
self.name = name
self.age = age
self.brith = brith class Brith:
def __init__(self, year, month, day):
self.year = year
self.month = month
self.day = day brith = Brith(1998, 10, 23) hkey = Teacher('hkey', 20, brith) print(hkey.brith.year)
print(hkey.brith.month)
练习:组合
[ python ] 类的组合的更多相关文章
- 7 python 类的组合
1.组合与重用性 软件重用的重要方式除了继承之外还有另外一种方式,即:组合 组合指的是,在一个类中以另外一个类的对象作为 1.一个类的属性可以是一个类对象,通常情况下在一个类里面很少定义一个对象就是它 ...
- python类的组合
类的组合,即在类实例化时,将另一个类的实例作为参数传入,这样可以将两个实例关联起来. 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好. 例如,描述一个机器人类,这个大类是由很多 ...
- python类与对象的组合与继承
1.把类的对象实例化放到一个新的类里面叫做类的组合,组合就是指几个横向关系的类放在一起,纵向关系的类放在一起是继承,根据实际应用场景确定.简单的说,组合用于“有一个”的场景中,继承用于“是一个”的场景 ...
- Python 类的名称空间和组合
一.Python类的名称空间 class Student(object): School = '北京大学' def __init__(self): pass stu1 = Student() stu1 ...
- python - class类 (三) 类的组合
类的组合: #组合 class A1(): def pr(self): return 'a1' class A2(): def pr(self): return 'a2' class A3(): de ...
- python 类知识点总结
python 类知识点总结 面向对象思想: 1.设计的时候,一定要明确应用场景 2.由对象分析定义类的时候,找不到共同特征和技能不用强求 1.简述类.对象.实例化.实例这些名词的含义: 类:从一组对象 ...
- python 类和对象
类和对象 类 1.类的组成 数据和函数,二者是类的属性 2.两个作用: 实例化 属性引用 属性引用:类名.属性(增删改查) 实例化: 类名加括号就是实例化,会自动出发__init__的运行 ...
- Python类和对象
目录 类与对象 其他方法 继承 经典类和新式类 派生 组合 接口.归一化设计与抽象类 继承实现的原理 子类中调用父类的方法 指名道姓 super()方法 多态与多态性 封装 单下划线开头 双下划线开头 ...
- day25类的组合多态封装
类的组合多态与封装类的组合 1. 什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 2. 为何要用组合 通过为某一个对象添加属性(属性的值是另外一个类的对象)的方式,可以 ...
随机推荐
- BZOJ1911:[Apio2010]特别行动队——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=1911 又是一个显然的dp……好吧我懒得讲了. s[i]是战斗力前缀和. 我们仍然设k<j< ...
- Mysql数据库的主从复制
怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作: 1.1.版本一致 1.2.初始化表,并在后台启动mysql 1.3.修改root的密码 2.修 ...
- PHP中缓存技术
1.全页面静态化缓存 也就是将页面全部生成html静态页面,用户访问时直接访问的静态页面,而不会去走php服务器解析的流程.此种方式,在CMS系统中比较常见,比如dedecms: 一种比较常用的实现方 ...
- 【树状数组】【P3608】平衡的照片
传送门 Description FJ正在安排他的N头奶牛站成一排来拍照.(1<=N<=100,000)序列中的第i头奶牛的高度是h[i],且序列中所有的奶牛的身高都不同. 就像他的所有牛的 ...
- 微信小程序将view动态填满全屏
一.在app.js利用官方方法获取设备信息,将获取到的screenHeight.windowHeight度量单位统一由rpx换算为px 注:官方文档给出 [rpx换算px (屏幕宽度/750) ][ ...
- 用camke编译python程序
project(test) cmake_minimum_required(VERSION 3.0) find_package(OpenCV REQUIRED) find_package (Python ...
- Multi-target tracking with Single Moving Camera
引自:http://www.eecs.umich.edu/vision/mttproject.html Wongun Choi, Caroline Pantofaru, Silvio Savarese ...
- Java中x=x+1 与x+=1 的一点区别
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/04/01/2994028.html 作者:十年半山 今天同悦姐学到了关于Java的复合 ...
- Lucene6.6添加索引数据时字符个数超限,字符数不能超过BYTE_BLOCK_SIZE=32766
最近发现Lucene6.6版本添加索引数据字符数超过32766时,出现报错,而Lucene4.6版本中则未出现这一问题,原因如下: 概述: 添加索引数据时,对于分词字段,分词后的Ter ...
- 如何生成Java Key以及sign一个jar
1. 生成Java Key: keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize mydomain ...