类与类的关系一

mac2022-06-30  38

类与类的关系一

从空间角度研究类 class A:

address = '美丽富饶的沙河' def __init__(self, name): self.name = name def func(self): if self.name == 'dsb': self.skins = '吉利服' def func1(self): print(self.__dict__) A.aaa = '易水寒'

obj = A('dsb')

# 类外面可以给对象封装属性

# respons = input('太白帅不帅!')

# if respons == '帅':

# obj.weapon = 'AWM'

# print(obj.__dict__)

# 类内部封装属性

obj.func()

print(obj.__dict__)

A.teamp = '39.5'

print(A.__dict__)

obj = A('dsb')

# A.func1(111)

A.func1(obj)

print(A.__dict__)

class Person:

mind = '有思想' language = '会使用语言' def __init__(self, name, age): self.name = name self.age = age def work(self): print('人类一般都需要工作')

p1 = Person('dsb', 21) del p1.mind # 报错

print(p1.mind)

p1.mind = '无脑'

print(p1.mind)

print(Person.mind)

对象如果查询一个属性: 对象空间 ----> 类空间 ----> 父类空间 --->

类查询一个属性: 类空间 ----> 父类空间 ---->

单向不可逆

对象与对象之间原则上互相独立(除去组合这种特殊的关系之外).

类与类之间的关系 class A: pass

class B: pass

'''

依赖关系组合关系(关联组合聚合)继承关系(明天讲) '''

1.依赖关系(主从关系)

大象进冰箱

class Elephant:

def __init__(self, name): self.name = name def open(self, ref1): # print(ref1) print(f'{self.name}默念三声: 芝麻开门') ref1.open_door() def close(self): print('大象默念三声:芝麻关门')

class Refrigerator:

def __init__(self, name): self.name = name def open_door(self): print(f'{self.name}冰箱门被打开了....') def close_door(self): print('冰箱门被关上了....')

ele = Elephant('琪琪')

ele1 = Elephant('安安')

ref = Refrigerator('美菱')

ele.open(ref)

ele1.open(ref)

依赖关系: 将一个类的类名或者对象传给另一个类的方法中.

实现两个:

大象执行open方法:

显示: '哪个大象 大象默念三声: 芝麻开门'

显示: '哪个冰箱门 冰箱门被打开了....'

关门的流程也需要完成.

组合:(聚合,组合,关联)

class Boy:

def init(self, name):

self.name = name

def meet(self, girl_friend=None):

self.girl_friend = girl_friend # wu对象空间 : girl_friend : object对象

def have_diner(self): # self = wu这个对象空间

if self.girl_friend:

print(f'{self.name}请年龄为:{self.girl_friend.age},姓名为{self.girl_friend.name}一起吃六块钱的麻辣烫')

self.girl_friend.shopping(self) # (self = wu对象空间)

else:

print('单身狗,吃什么吃')

class Girl:

def init(self, name, age):

self.name = name

self.age = age

def shopping(self,boy_friend):

print(f'{boy_friend.name},{self.name}一起去购物!')

wu = Boy('吴超')

# wu.have_diner()

# flower = Girl('如花', 48)

# wu.meet('如花')

flower = Girl('如花', 48)

# 组合: 将一个类的对象封装成另一个类的对象的属性.

wu.meet(flower)

wu.have_diner()

上面例题的难点:

一个类的方法只能有此类的对象去调用.

一个类的方法的第一个self只接受此类的对象.

4. 模拟英雄联盟写一个游戏人物的类(升级题).

要求:

1. 创建一个 Game_role的类.

2. 构造方法中给对象封装name,ad(攻击力),hp(血量).三个属性.

3. 创建一个attack方法,此方法是实例化两个对象,互相攻击的功能:

例: 实例化一个对象 盖伦,ad为10, hp为100

实例化另个一个对象 剑豪 ad为20, hp为80

盖伦通过attack方法攻击剑豪,此方法要完成 '谁攻击谁,谁掉了多少血, 还剩多少血'的提示功能.

class GameRole:

def __init__(self, name, ad, hp): self.name = name self.ad = ad self.hp = hp def attack(self,p1): # print(self.name) # print(p1.name) p1.hp = p1.hp - self.ad print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血') def equit_weapon(self,wea): # print(wea) self.weapon = wea # 组合: 给gailun这个对象封装了一个为weapon属性,属性值为wea == great_sword对象

class Weapon:

def __init__(self, name, ad): self.name = name self.ad = ad def weapon_attack(self, p1, p2): # print(self) p2.hp = p2.hp - self.ad print(f'{p1.name}利用{self.name}给了{p2.name}一下,{p2.name}还剩{p2.hp}血')

gailun = GameRole('草丛伦', 10, 100)

jianhao = GameRole('风男', 20, 80)

gailun.attack(jianhao)

gailun.attack(jianhao)

gailun.attack(jianhao)

利用武器攻击

gailun = GameRole('盖伦', 10, 100)

zhaoxin = GameRole('赵信', 20, 90)

great_sword = Weapon('大保健', 30)

spear = Weapon('红缨枪', 40)

great_sword.weapon_attack(gailun, zhaoxin)

上面需要解决的问题: 发起武器攻击的发起者应该是人类,而不是great_sword武器对象.

但是weapon_attack只能有Weapon类的对象去调用.

gailun = GameRole('盖伦', 10, 100) zhaoxin = GameRole('赵信', 20, 90) great_sword = Weapon('大保健', 30)

print(great_sword

gailun.equit_weapon(great_sword) # 依赖关系

print(gailun.weapon)

gailun.weapon == great_sword

great_sword.weapon_attack()

gailun.weapon.weapon_attack(gailun, zhaoxin)

posted on 2019-07-08 21:20  七橼77 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/-777/p/11153904.html

相关资源:JAVA上百实例源码以及开源项目
最新回复(0)