Python面向对象 类的空间问题
2021-02-16 12:20
标签:bbb 利用 self 一起 组合关系 夏天 装备 参数传递 class 1.1 何处可以添加对象属性 总结:对象的属性不仅可以在__init__里面添加,还可以在类的其他方法或者类的外面添加。* 1.2 何处可以添加类的静态属性 总结:类的属性不仅可以在类内部添加,还可以在类的外部添加。 1.3 对象如何找到类的属性 之前咱们都学习过,实例化一个对象,可以通过点的方式找到类中的属性,那么他为什么可以找到类中的属性呢? 通过图解说明: 对象查找属性的顺序:先从对象空间找 ------> 类空间找 ------> 父类空间找 ------->..... 类名查找属性的顺序:先从本类空间找 -------> 父类空间找--------> ........ 上面的顺序都是单向不可逆,类名不可能找到对象的属性。 ?千世界, 万物之间皆有规则和规律. 我们的类和对象是对?千世界中的所有事物进?归类. 那事物之间存在着相对应的关系. 类与类之间也同样如此. 在?向对象的世界中. 类与类中存在以下关系:我们会使用这个关系就行,不用扣这写名词 2.1 依赖关系 ?先, 我们设计?个场景. 夏天到了大象很热,大象想到冰箱中. 注意. 在这个场景中, 其实是存在了两种事物的. ?个是?象, ?象负责整个事件的掌控者, 还有?个是冰箱, 冰箱负责被?象操纵. 通过这个我们要分出主次, 大象就是主 冰箱就是次 ?先, 写出两个类, ?个是?象类, ?个是冰箱类 冰箱的功能非常简单, 只要会开?, 关?就?了. 但是?象就没那么简单了. 想想. ?象开?和关?的时候是不是要先找个冰箱啊. 然后呢? 打开冰箱?. 是不是打开刚才找到的那个冰箱?. 然后装??. 最后呢? 关冰箱?, 注意, 关的是刚才那个冰箱吧. 也就是说. 开?和关??的是同?个冰箱. 并且. ?象有更换冰箱的权利, 想进那个冰箱就进那个冰箱. 这时, ?象类和冰箱类的关系并没有那么的紧密. 因为?象可以指定任何?个冰箱. 接下来. 我们把代码完善?下 通过上边的代码可以发现,将一个类名或对象当做参数传递给另一个函数被使用就是依赖关系 2.2 组合关系 这个最简单. 也是最常?的?种关系. 比如. ?家都有男女朋友. 男?关联着女朋友. 女?关联着男朋友. 这种关系可以是互相的, 也可以是单??的. 定义类 实例(创建)日天对象 实例(创建)zhoushen对象 我们了解了依赖关系和组合关系,现在来对比一下 依赖关系,将一个类或对象传递给另一个类的方法中 组合关系,将一个类的对象传递到另一个类的对象属性中 咱们设计一个游戏人物类,让实例化几个对象让这几个游戏人物实现互殴的效果。 但是这样互相攻击没有意思,一般游戏类的的对战方式要借助武器,武器是一个类,武器类包含的对象很多:刀枪棍剑斧钺钩叉等等,所以咱们要写一个武器类。 接下来借助武器攻击对方: 所以,对代码进行修改。 上面就是组合,只要是人物.equip_weapon这个方法,那么人物就封装了一个武器对象,再利用武器对象调用其类中的weapon_attack方法 Python面向对象 类的空间问题 标签:bbb 利用 self 一起 组合关系 夏天 装备 参数传递 class 原文地址:https://www.cnblogs.com/zzsy/p/12706569.html一.Python 类的空间问题
class A:
def __init__(self,name):
self.name = name
def func(self,sex):
self.sex = sex
# 类外面可以:
obj = A(‘meet‘)
obj.age = 18
print(obj.__dict__) # {‘name‘: ‘meet‘, ‘age‘: 18}
# 类内部也可以:
obj = A(‘meet‘) # __init__方法可以。
obj.func(‘男‘) # func 方法也可以。
class A:
def __init__(self,name):
self.name = name
def func(self,sex):
self.sex = sex
def func1(self):
A.bbb = ‘ccc‘
# 类的外部可以添加
A.aaa = ‘baoyuan‘
print(A.__dict__)
# 类的内部也可以添加。
A.func1(111)
print(A.__dict__)
二. 类与类之间的关系
class Elphant:
def __init__(self, name):
self.name = name
def open(self):
‘‘‘
开?
‘‘‘
pass
def close(self):
‘‘‘
关?
‘‘‘
pass
class Refrigerator:
def open_door(self):
print("冰箱?被打开了")
def close_door(self):
print("冰箱?被关上了")
class Elphant:
def __init__(self, name):
self.name = name
def open(self,obj1):
‘‘‘
开?
‘‘‘
print(‘大象要开门了,默念三声,开‘)
obj1.open_door()
def close(self):
‘‘‘
关?
‘‘‘
print(‘大象要关门了,默念三声,关‘)
class Refrigerator:
def open_door(self):
print("冰箱?被打开了")
def close_door(self):
print("冰箱?被关上了")
elphant1 = Elphant(‘大象‘)
haier = Refrigerator()
elphant1.open(haier)
class Boy:
def __init__(self,name,girlFriend=None):
self.name = name
self.girlFriend = girlFriend
def have_a_diner(self):
if self.girlFriend:
print(‘%s 和 %s 一起晚饭‘%(self.name,self.girlFriend.name))
else:
print(‘单身狗,吃什么饭‘)
class Girl:
def __init__(self,name):
self.name = name
b = Boy(‘日天‘)
b.have_a_diner() # 此时是单身狗
# 突然有一天,日天牛逼了
b.girlFriend = ‘如花‘
b.have_a_diner() #共进晚餐
# zhoushen 生下来就有女朋友 服不服
gg = Girl(‘小花‘)
bb = Boy(‘zhoushen‘, gg)
bb.have_a_diner()
# 结果嫌他有点娘,分了
bb.girlFriend = None
bb.have_a_diner()
class Gamerole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p1):
p1.hp -= self.ad
print(‘%s攻击%s,%s掉了%s血,还剩%s血‘%(self.name,p1.name,p1.name,self.ad,p1.hp))
gailun = Gamerole(‘盖伦‘,10,200)
yasuo= Gamerole(‘亚索‘,50,80)
#盖伦攻击亚索
gailun.attack(yasuo)
# 亚索攻击盖伦
yasuo.attack(gailun)
class Gamerole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p1):
p1.hp -= self.ad
print(‘%s攻击%s,%s掉了%s血,还剩%s血‘%(self.name,p1.name,p1.name,self.ad,p1.hp))
class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def weapon_attack(self,p1,p2):
p2.hp = p2.hp - self.ad - p1.ad
print(‘%s 利用 %s 攻击了%s,%s还剩%s血‘ %(p1.name,self.name,p2.name,p2.name,p2.hp))
pillow = Weapon(‘绣花枕头‘,2)
pillow.weapon_attack(meet,panky)
# 但是上面这么做不好,利用武器攻击也是人类是动作的发起者,所以不能是pillow武器对象,而是人类利用武器攻击对方
class Gamerole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp
def attack(self,p1):
p1.hp -= self.ad
print(‘%s攻击%s,%s掉了%s血,还剩%s血‘%(self.name,p1.name,p1.name,self.ad,p1.hp))
def equip_weapon(self,wea):
self.wea = wea # 组合:给一个对象封装一个属性改属性是另一个类的对象
class Weapon:
def __init__(self,name,ad):
self.name = name
self.ad = ad
def weapon_attack(self,p1,p2):
p2.hp = p2.hp - self.ad - p1.ad
print(‘%s 利用 %s 攻击了%s,%s还剩%s血‘
%(p1.name,self.name,p2.name,p2.name,p2.hp))
# 实例化三个人物对象:
meet = Gamerole(‘洲神‘,10,200)
panky = Gamerole(‘瑶神‘,20,50)
pillow = Weapon(‘绣花枕头‘,2)
# 给人物装备武器对象。
meet.equip_weapon(pillow)
# 开始攻击
meet.wea.weapon_attack(meet,panky)