博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第四周 day17 类名称空间,查询顺序等/组合
阅读量:6828 次
发布时间:2019-06-26

本文共 3546 字,大约阅读时间需要 11 分钟。

本节主要内容:

面向对象中:

  1.类名称空间和对象的名称空间

  2.查询顺序

  3.计算一个类中有多少实例化对象(含有__init__初始化方法的类)

  4.组合

 

一.类名称空间和对象的名称空间

 

创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性

而类有两种属性:静态属性和动态属性

  • 静态属性就是直接在类中定义的变量
  • 动态属性就是定义在类中的方法

其中类的静态属性是共享给所有对象的,而类的动态属性是绑定到所有对象的

创建一个对象/实例就会创建一个对象/实例的名称空间,存放对象/实例的名字,称为对象/实例的属性

 

#创建一个Person类class Person:    animal = '高级动物'    soul = '有灵魂'        #类的静态变量/静态字段/静态属性    language = '语言'    #类的动态变量/动态属性/方法    def __init__(self, country, name, sex, age, hight):   #初始化方法        self.country = country        self.name = name        self.sex = sex        self.age = age        self.hight = hight    def eat(self):        print('%s吃饭' % self.name)    def sleep(self):        print('睡觉')    def work(self):        print('工作')Person.__dict__['sleep'](111)   #内存地址+()也可以执行方法,相当于Person.sleep(111),,必须要加参数,否则不能打印睡觉p1 = Person('菲律宾','alex','未知',42,175)     #实例化一个对象p1# p1.animal = '禽兽'    #新增一个对象属性# print(p1.animal)      #查看对象的属性值print(Person.name)    #通过类查看类的属性

 

 

类名称空间和对象名称空间在内存的情况;

 

 

 

创建一个类,程序的执行情况:

 

 

 

 

二.查询顺序

#   对象.属性 : 先从对象空间找,如果找不到,再从类空间找,再找不到,再从父类找.... #   类名.属性 : 先从本类空间找,如果找不到,再从父类找.... 同一个类中,对象与对象之间是互相独立的.

 

 

三.计算一个类中有多少实例化对象(含有__init__初始化方法的类)

1.代码

# 计算一个类 实例化多少对象.class Count:    count = 0    def __init__(self):        Count.count = self.count + 1obj1 = Count()obj2 = Count()print(Count.count)  #2count = 0# 通过类名可以更改我的类中的静态变量值Count.count = 6   #通过类名修改count值print(Count.__dict__)'''{'__module__': '__main__', 'count': 6, '__init__': 
, '__dict__':
, '__weakref__':
, '__doc__': None}'''# 但是通过对象 不能改变只能引用类中的静态变量obj1.count = 6 #相当于在对象obj1新增属性,对类中的属性count无法修改.

2.执行过程

 

 

 

 

四.组合

组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.
# 组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象.# 版本一:添加武器:斧子,刀,枪,棍,棒...,# 代码不合理: 人物利用武器攻击别人,你的动作发起者是人,而不是武器.class GameRole:    def __init__(self, name, ad, hp):        self.name = name        self.ad = ad        self.hp = hp    def attack(self,p):        p.hp = p.hp - self.ad        print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))class Weapon:    def __init__(self,name,ad):        self.name = name        self.ad = ad    def fight(self,p1,p2):        p2.hp = p2.hp - self.ad        print('%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)#用武器fightaxe.fight(p1,p2)   #大阳哥 用三板斧打了印度阿宁,印度阿宁 掉了60血,还剩140血broadsword.fight(p2,p1)     #印度阿宁 用屠龙宝刀打了大阳哥,大阳哥 掉了100血,还剩400血#不用武器attackp1.attack(p2)    #大阳哥 攻击 印度阿宁,印度阿宁 掉了20血,还剩120血 # 版本二:class GameRole:    def __init__(self, name, ad, hp):        self.name = name        self.ad = ad        self.hp = hp    def attack(self,p):        p.hp = p.hp - self.ad        print('%s 攻击 %s,%s 掉了%s血,还剩%s血' %(self.name,p.name,p.name,self.ad,p.hp))    def armament_weapon(self,wea):        self.wea = weaclass Weapon:    def __init__(self,name,ad):        self.name = name        self.ad = ad    def fight(self,p1,p2):        p2.hp = p2.hp - self.ad        print('%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)# print(axe)   #<__main__.Weapon object at 0x0000009E18C57C88>p1.armament_weapon(axe)  # 给大阳哥 装备了三板斧这个对象.# print(p1.wea)    #<__main__.Weapon object at 0x00000085E8A57C50># print(p1.wea.name)     #三板斧# print(p1.wea.ad)       #60p1.wea.fight(p1,p2)   #大阳哥 用三板斧打了印度阿宁,印度阿宁 掉了60血,还剩140血

转载于:https://www.cnblogs.com/mwj-blog1/p/9361527.html

你可能感兴趣的文章
记一次在 Linux 上创建 Django 应用的过程
查看>>
伍雨霏-懂游戏的云服务如何保驾护航
查看>>
MFC界面库BCGControlBar v25.1新版亮点四:网格控件等
查看>>
ssh 连接非22端口服务器的方法:
查看>>
Linux基础入门
查看>>
org.hibernate.hql.internal.ast.QuerySyntaxException: user is not mapped
查看>>
图解排序算法之快速排序-双端探测法
查看>>
mysql
查看>>
11月15日云栖精选夜读:分布式服务框架Dubbo疯狂更新!阿里开源要搞大事情?...
查看>>
Druid数据库连接池就这么简单
查看>>
Python最假的库:Faker
查看>>
IDE 插件新版本发布,开发效率 “biu” 起来了
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石
查看>>
Redis 基础、高级特性与性能调优
查看>>
BZT52C15S资料
查看>>
Laravel Telescope入门教程(上)
查看>>
Linux配置ip 及网络问题排查
查看>>
AndroidStudio用Cmake方式编译NDK代码(cmake配置.a库)
查看>>
OSChina 周四乱弹 ——黑丝短裙java程序员同事
查看>>
设置iptables之后不能正常访问ftp解决方法
查看>>