1. 从空间角度研究类

1.1 添加对象的属性:

  1. 在类的__init__中可以添加;
  2. 在类的方法中也可以添加;
  3. 在类的内部也可以添加。

1.2 添加类的属性:

  1. 在类的方法中可以添加,传参;
  2. 在类的外部也可添加。

1.3 类与对象的关系:

  1. 类名(): 实例化对象,会在对象空间生成一个类对象指针,指向类空间。
  2. 对象空间有相同的名字时,肯定先从对象空间找。对象之所以可以找到类。是因为对象空间中有类对象指针。
  3. 对象查找属性的顺序: 对象.名字
  4. 对象空间——>类空间——>父类空间
  5. 类查找属性的顺序: 类.名字
  6. 类空间——>父类空间

2. 类与类直接的关系

2.1 类与类的关系:

  1. 依赖关系
  2. 关联关系
  3. 组合关系
  4. 聚合关系
  5. 实现关系
  6. 继承关系(类的三大特性之一:继承。)

2.2 依赖关系 —— 主从之分

​ 将一个类的类名或者对象传入另一个类的方法中。

  1. class Elephant:
  2. def __init__(self,name):
  3. self.name = name
  4. def open(self, argv):
  5. print(f"{self.name} 默念三声 开门")
  6. argv.be_open()
  7. def close(self, argv):
  8. print(f"{self.name} 默念三声 关门")
  9. argv.be_close()
  10. class Refrigerator:
  11. def __init__(self,name):
  12. self.name = name
  13. def be_open(self):
  14. print(f"{self.name} 被打开")
  15. def be_close(self):
  16. print(f'{self.name} 被关上')
  17. meet = Elephant("MEET")
  18. haier = Refrigerator("海尔")
  19. meet.open(haier) # 对象名做参数传入到类的方法中
  20. meet.close(haier)

2.3 组合关系

​ 将一个类的对象封装到另一个类的对象的属性中。在外部使用增、改方法,将其封装。

​ self:永远默认接受本类或子类的实例化对象。

  1. class Boy:
  2. def __init__(self, name, girlfirend = None):
  3. self.name = name
  4. self.girlfirend = girlfirend
  5. def have_a_dinner(self):
  6. if self.girlfirend:
  7. print(f'{self.name}与他的{self.girlfirend.age}岁女朋友{self.girlfirend.name}一起烛光晚餐!')
  8. else:
  9. print("单身狗,吃什么吃!")
  10. def girl_skill(self):
  11. print(f'{self.name}的女朋友 ', end='')
  12. self.girlfirend.skill()
  13. class Girl:
  14. def __init__(self,name,age):
  15. self.name = name
  16. self.age = age
  17. def skill(self):
  18. print(f'{self.name}的职业是老师。')
  19. meet = Boy("宝元")
  20. alex = Girl("alex", 20)
  21. meet.girlfirend = alex # 将类的对象封装到另一个类的对象的属性中
  22. meet.have_a_dinner()
  23. meet.girl_skill()
  1. class GameRole:
  2. def __init__(self,name,ad,hp):
  3. self.name = name
  4. self.ad = ad
  5. self.hp = hp
  6. def attck(self,p1):
  7. p1.hp = p1.hp - self.ad
  8. print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血')
  9. def equipment_wea(self,wea):
  10. self.weapon = wea # Sword
  11. class Weapon: # 武器类
  12. def __init__(self,name,ad):
  13. self.name = name
  14. self.ad = ad
  15. def weapn_attack(self,p1,p2):
  16. p2.hp =p2.hp - self.ad
  17. print(f'{p1.name}利用{self.name}打了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血. ')
  18. gailun = GameRole("盖伦",10,100)
  19. xin = GameRole("赵信",20,80)
  20. Sword = Weapon("大宝剑",15)
  21. Musket = Weapon("长枪",30)
  22. gailun.equipment_wea(Sword) # 将Sword封装到gailun对象
  23. gailun.weapon.weapn_attack(gailun, xin)
  24. # 通过英雄人物控制武器执行攻击动作
  25. xin.equipment_wea(Musket)
  26. xin.weapon.weapn_attack(xin,gailun)

依赖和组合让类与类产生关系,增强耦合性。

python 22 类与对象的更多相关文章

  1. 1.面向过程编程 2.面向对象编程 3.类和对象 4.python 创建类和对象 如何使用对象 5.属性的查找顺序 6.初始化函数 7.绑定方法 与非绑定方法

    1.面向过程编程 面向过程:一种编程思想在编写代码时 要时刻想着过程这个两个字过程指的是什么? 解决问题的步骤 流程,即第一步干什么 第二步干什么,其目的是将一个复杂的问题,拆分为若干的小的问题,按照 ...

  2. python的类和对象2(self参数)

    python的类和对象2(self参数) 1.python里面对象的方法都会有self参数,它就相当于C++里面的this指针:绑定方法,据说有了这个参数,Python 再也不会傻傻分不清是哪个对象在 ...

  3. Python初识类与对象

    Python初识类与对象 类与对象 世界观角度分析类与对象 类是一个抽象的概念,而对象是一个实体的存在,对象由类创造而出,每个对象之间互相独立互不影响,一个对象可以同时拥有多个类的方法,实例化就是通过 ...

  4. python的类与对象

    类与对象 1.什么是类 类和函数一样是程序编程的一种方式,在处理某些问题的时候类比函数更加适合让编程变得简化,在python里面函数式编程和类编程都是为了简化代码的一种编程方式,具体应用那个则由具体问 ...

  5. Python 定制类与其对象的创建和应用

    1.创建新类Athlete,创建两个唯一的对象实例sarah james,他们会继承Athlete类的特性 >>> class Athlete: def __init__(self, ...

  6. 搞懂Python的类和对象名称空间

    代码块的分类 python中分几种代码块类型,它们都有自己的作用域,或者说名称空间: 文件或模块整体是一个代码块,名称空间为全局范围 函数代码块,名称空间为函数自身范围,是本地作用域,在全局范围的内层 ...

  7. python的类和对象(类的静态字段)

    转自:http://www.cnblogs.com/Eva-J/p/5044411.html 什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是 ...

  8. python的类和对象——番外篇(类的静态字段)

    什么是静态字段 在开始之前,先上图,解释一下什么是类的静态字段(我有的时候会叫它类的静态变量,总之说的都是它.后面大多数情况可能会简称为类变量.): 我们看上面的例子,这里的money就是静态字段,首 ...

  9. python的类和对象——进阶篇

    写在前面的话 终于,又到了周五.当小伙伴们都不再加班欢欢喜喜过周末的时候,我刚刚写完这一周的游戏作业,从面对晚归的紧皱眉头到现在的从容淡定,好像只有那么几周的时间.突然发现:改变——原来这么简单.很多 ...

随机推荐

  1. 小白开学Asp.Net Core《二》

    小白开学Asp.Net Core<二> ——数据仓储层(Repositroy) 一.历史现象 在后端开发中,数据库操作是最频繁的,每一个开发人员都会接触,甚至不少开发人员每天的工作就是与数 ...

  2. 详述Spring对数据校验支持的核心API:SmartValidator

    每篇一句 要致富,先修路.要使用,先...基础是需要垒砌的,做技术切勿空中楼阁 相关阅读 [小家Java]深入了解数据校验:Java Bean Validation 2.0(JSR303.JSR349 ...

  3. 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron

    单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...

  4. web设计_8_数据表格内容样式分离

    1.页面需要用到table的时候,样式重置CSS要设置: table{ border-collapse: collapse; border-spacing:; } 2. HTML结构 <tabl ...

  5. springboot的邮件服务

    作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 springboot仍然在狂速发展,才五个多月没有关注,现在看官网已经到1.5.3.RELEA ...

  6. UML同一建模语言

    结构型图:描述系统静态结构,显示系统类之间的静态关系. 行为型图:描述系统的动态属性,显示系统元素如何协作产生满足要求的系统行为. 类图分类名,属性清单,方法清单,性质清单几层 类之间的关系:1 一般 ...

  7. Hadoop自学系列集(三) ---- Hadoop安装

    这节就开始讲述Hadoop的安装吧.在这之前先配置下SSH免密码登录,为什么需要配置这个呢?大家都知道Hadoop集群中可能有几十台机器甚至是上千台机器,而每次启动Hadoop都需要输入密码才能够登录 ...

  8. python编码问题——解决python3 UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX

    python实现爬虫遇到编码问题: error:UnicodeEncodeError: 'gbk' codec can't encode character '\xXX' in position XX ...

  9. 【iOS】CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable

    CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SH ...

  10. UE4 代理 BindRaw和BindUObject

    代理允许您在C++对象上以通用的但类型安全的方式调用成员函数.通过使用代理,可以将其动态地绑定到任何对象的成员函数上,然后在该对象上调用函数,即时调用者不知道该对象的类型也没关系. 任何时候都应该通过 ...