admin管理员组文章数量:1122850
类名称空间,查询顺序,组合
一.创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性
而类有两种属性:静态属性和动态属性
- 静态属性就是直接在类中定义的变量
- 动态属性就是定义在类中的方法
查询顺序:对象 . 属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找....类名 . 属性 : 先从本类空间找,如果找不到,再从父类找....
class Person:animal = '高级动物'soul = '有灵魂'language = '语言'def __init__(self, country, name, sex, age, hight):self.country = countryself.name = nameself.sex = sexself.age = ageself.hight = hightdef eat(self):print('%s吃饭' % self.name)def sleep(self):print('睡觉')def work(self):print('工作') p1 = Person('菲律宾','alex','未知',42,175) 结果为:高级动物 print(p1.animal)p1.animal = '禽兽' print(p1.animal) 结果为:禽兽
二.计算一个类实例化多少对象
class Count:count = 0def __init__(self):Count.count = Count.count + 1obj1 = Count() obj2 = Count() obj2 = Count() obj2 = Count() obj2 = Count()print(Count.count) 结果:5
通过类名可以更改我的类中的静态变量值
Count.count = 6 print(Count.__dict__) 结果: {'__init__': <function Count.__init__ at 0x00000207E680F378>, '__doc__': None,
'__weakref__': <attribute '__weakref__' of 'Count' objects>, '__module__': '__main__',
'__dict__': <attribute '__dict__' of 'Count' objects>, 'count': 6}
但是通过对象 不能改变只能引用类中的静态变量
obj1 = Count() print(obj1.count) obj1.count = 6
三.组合
组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.
''''模拟英雄联盟写一个游戏人物的类(升级题).要求:(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 = nameself.ad = adself.hp = hpdef attack(self,p):p.hp = p.hp - self.adprint('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))class Weapon:def __init__(self,name,ad):self.name = nameself.ad = addef fight(self,p1,p2):p2.hp = p2.hp - self.adprint('%s 用%s打了%s,%s 掉了%s血,还剩%s血'\% (p1.name,self.name,p2.name,p2.name,self.ad,p2.hp))p1 = GameRole('大阳哥',20,500) p2 = GameRole('印度阿宁',50,200) axe = Weapon('三板斧',60) broadsword = Weapon('屠龙宝刀',100)axe.fight(p1,p2) broadsword.fight(p2,p1) 结果: 大阳哥 用三板斧打了印度阿宁,印度阿宁 掉了60血,还剩140血 印度阿宁 用屠龙宝刀打了大阳哥,大阳哥 掉了100血,还剩400血
版本二:
class GameRole:def __init__(self, name, ad, hp):self.name = nameself.ad = adself.hp = hpdef armament_weapon(self, wea):self.wea = wea class Weapon:def __init__(self, name, ad):self.name = nameself.ad = addef fight(self, p1, p2):p2.hp = p2.hp - self.adprint('%s 用%s打了%s,%s 掉了%s血,还剩%s血' \% (p1.name, self.name, p2.name, p2.name, self.ad, p2.hp))p1 = GameRole('大阳哥', 20, 500) p2 = GameRole('印度阿宁', 50, 200) axe = Weapon('三板斧', 60) broadsword = Weapon('屠龙宝刀', 100) p1.armament_weapon(axe) # 给大阳哥 装备了三板斧这个对象. p1.wea.fight(p1, p2)
转载于:.html
版权声明:本文标题:类名称空间,查询顺序,组合 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1706344176a689950.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论