1. 从空间角度研究类

1.1 添加对象的属性:

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

1.2 添加类的属性:

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

1.3 类与对象的关系:

类名(): 实例化对象,会在对象空间生成一个类对象指针,指向类空间。

对象空间有相同的名字时,肯定先从对象空间找。对象之所以可以找到类。是因为对象空间中有类对象指针。
对象查找属性的顺序: 对象.名字
对象空间——>类空间——>父类空间 类查找属性的顺序: 类.名字
类空间——>父类空间

2. 类与类直接的关系

2.1 类与类的关系:

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

2.2 依赖关系 —— 主从之分

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

class Elephant:

    def __init__(self,name):
self.name = name def open(self, argv):
print(f"{self.name} 默念三声 开门")
argv.be_open() def close(self, argv):
print(f"{self.name} 默念三声 关门")
argv.be_close() class Refrigerator: def __init__(self,name):
self.name = name def be_open(self):
print(f"{self.name} 被打开") def be_close(self):
print(f'{self.name} 被关上') meet = Elephant("MEET")
haier = Refrigerator("海尔") meet.open(haier) # 对象名做参数传入到类的方法中
meet.close(haier)

2.3 组合关系

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

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

class Boy:
def __init__(self, name, girlfirend = None):
self.name = name
self.girlfirend = girlfirend
def have_a_dinner(self):
if self.girlfirend:
print(f'{self.name}与他的{self.girlfirend.age}岁女朋友{self.girlfirend.name}一起烛光晚餐!')
else:
print("单身狗,吃什么吃!")
def girl_skill(self):
print(f'{self.name}的女朋友 ', end='')
self.girlfirend.skill() class Girl:
def __init__(self,name,age):
self.name = name
self.age = age def skill(self):
print(f'{self.name}的职业是老师。') meet = Boy("宝元")
alex = Girl("alex", 20)
meet.girlfirend = alex # 将类的对象封装到另一个类的对象的属性中
meet.have_a_dinner()
meet.girl_skill()
class GameRole:
def __init__(self,name,ad,hp):
self.name = name
self.ad = ad
self.hp = hp def attck(self,p1):
p1.hp = p1.hp - self.ad
print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血') def equipment_wea(self,wea):
self.weapon = wea # Sword class Weapon: # 武器类 def __init__(self,name,ad):
self.name = name
self.ad = ad def weapn_attack(self,p1,p2):
p2.hp =p2.hp - self.ad
print(f'{p1.name}利用{self.name}打了{p2.name}一下,{p2.name}掉了{self.ad}血,还剩{p2.hp}血. ') gailun = GameRole("盖伦",10,100)
xin = GameRole("赵信",20,80) Sword = Weapon("大宝剑",15)
Musket = Weapon("长枪",30) gailun.equipment_wea(Sword) # 将Sword封装到gailun对象
gailun.weapon.weapn_attack(gailun, xin)
# 通过英雄人物控制武器执行攻击动作 xin.equipment_wea(Musket)
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. [leetcode] 103 Binary Tree Zigzag Level Order Traversal (Medium)

    原题链接 题目要求以"Z"字型遍历二叉树,并存储在二维数组里. 利用BFS,对每一层进行遍历.对于每一层是从左还是从右,用一个整数型判断当前是偶数行还是奇数行就可以了. class ...

  2. 【Unity游戏开发】不接SDK也能在游戏内拉起加QQ群操作?

    一.引子 一般在游戏进行对外测试的时候都会有一个玩家QQ群,方便玩家反馈问题.交流游戏心得等.那么为了增加玩家加QQ群的欲望,可能会在游戏里面设计一个小功能,点击一下可以直接拉起手Q加群的操作,加了Q ...

  3. jQuery中的事件与动画 笔记整理

    一. jQuery中的事件 jQuery事件是对javaScript事件的封装. 1.基础事件 在javaScript中,常用的基础事件有鼠标事件.键盘事件.window事件.表单事件.事件的绑定和处 ...

  4. Vue事件修饰符详解

    整体学习Vue时看到Vue文档中有事件修饰符的描述,但是看了之后并没有理解是什么意思,于是查阅了资料,现在记录下来与大家分享 先给大家画一个示意图理解一下冒泡和捕获 (1) .stop修饰符 请看如下 ...

  5. vmware15pro安装ubuntu18.10时出现显示不全问题

    如果这个时候用网上的ALT+左键拖拽根本没有效果 所以这里提供另外一种方式 就是正常安装的时候发现分区部分显示不全 此时点击右上角的橙色小×:询问是否退出 我们点击退出:之后就会来到试用界面 到了这里 ...

  6. ipv6的连接

    基础知识不说了,网上一大堆! 基本内容不说了,写字太累了! 只说三点细节,记住就行: 1.ff开头的是多播地址,只能用于udp多播 2.fe80开头的是本地link地址,不管ping也好,connec ...

  7. Serilog 自定义Enricher 来增加记录的信息

    Serilog 自定义Enricher 来增加记录的信息 Intro Serilog 是 .net 里面非常不错的记录日志的库,结构化日志记录,而且配置起来很方便,自定义扩展也很方便 Serilog ...

  8. GooglePlay新版排行榜接入

    新版本的GMS的api和老版本的有很大的差异,刚接了一下,在这里留一个记号,以便查阅:判定是否已经登录 private static boolean isSignedIn(Cocos2dxActivi ...

  9. Ubuntu 16.04 硬盘安装

    自己的宏碁4741G 笔记本,已经用了6年了,最近感觉越来越慢,晚上突然想起装个Linux 玩玩,说干就干,选择了用户比较多的Ubuntu,网上下载16.04的版本,结合网上搜索到的安装教程,看似简单 ...

  10. Mac安装Homebrew的那些事儿

    Mac安装Homebrew的那些事儿 最近小明刚换置了一个 Mac 本,想搭建一个属于自己的博客网站,需要用到 Node.js 环境,而Node.js 在 MacOS 中是由 Homebrew 进行安 ...