一、从空间角度研究类

类外面可以给对象封装属性

class A:

	address = '美丽富饶的沙河'

	def __init__(self, name):
self.name = name
def func(self):
if self.name == 'dsb':
self.skins = '吉利服' obj = A('dsb')
# 类外面可以给对象封装属性
respons = input('太白帅不帅!')
if respons == '帅':
obj.weapon = 'AWM' print(obj.__dict__)

类内部封装属性

obj.func()
print(obj.__dict__) A.teamp = '39.5'
print(A.__dict__)
obj = A('dsb')
# A.func1(111)
A.func1(obj)
print(A.__dict__)

空间角度研究类

class Person:

    mind = '有思想'
language = '会使用语言' def __init__(self, name, age): self.name = name
self.age = age def work(self):
print('人类一般都需要工作') p1 = Person('dsb', 21)
del p1.mind # 报错
# print(p1.mind)
# p1.mind = '无脑'
# print(p1.mind)
# print(Person.mind)

注意: 对象无法改变类中的属性,对象只能查询或调用类里面的内容,但是不能改变,

类是一个公共区域,所有对象只能使用公共区域里面的东西,但是不能改变这些东西

类内部的各个对象是相互独立的(除去组合这种特殊的关系之外),各个对象之间是不能相互引用或者改变的,但是也可以产生关系:

对象取值顺序

对象如果想要查询一个属性: 对象空间>类空间>父类空间

类取值顺序

类查询一个对象: 类空间>父类空间

单向不可逆原则

二、类与类之间的关系

一般的关系不可能是一个

类与类之间是可以产生关系的

python中的三种关系:

1.依赖关系(主从关系)

# 大象自己进冰箱

# 大象类
class Elephant: def __init__(self, name):
self.name = name def open(self,ref1):
print('大象默念三声: 芝麻开门')
ref1.open_door()
def close(self):
print('大象默念三声: 芝麻关门') # 冰箱类
class Refrigerator: def __init__(self, name):
self.name = name def open_door(self):
print('冰箱门被打开了...') def closer_door(self):
print('冰箱门被关闭了...') ele = Elephant('齐齐')
ref = Refrigerator('美菱')
ele.open(ref) # 这一步是关键,将ref这个类传入到Elephant的方法open中 依赖关系:就是将一个类的类名或者对象传给另一个类的方法中

练习题:

实现两个
大象执行open方法:
显示:'哪个大象 大象默念三声:芝麻开门'
显示:'哪个冰箱门,冰箱门被打开了'
# 大象类
class Elephant: def __init__(self, name):
self.name = name def open(self,ref1):
# print(ref1)
print(f'大象{self.name}默念三声: 芝麻开门')
# ref1.open_door()
def close(self):
print('大象默念三声: 芝麻关门') # 冰箱类
class Refrigerator: def __init__(self, name):
self.name = name def open_door(self,ele1):
# print(ele1)
print(f'{self.name}冰箱门被打开了...') def closer_door(self):
print('冰箱门被关闭了...') ele = Elephant('齐齐')
ref = Refrigerator('美菱')
ele.open(ref)
ref.open_door(ele)
ele1.open(ref)
# 以上代码敲十遍

一句话总结

依赖关系:就是将一个类的类名或者对象传给另一个类的方法中
就是将一个类Refrigerator('美菱')的类名或者实例化后的对象ref传给另一个类Elephant的ele.open方法中

2.组合关系(关联组合聚合)

class Boy:

		def __init__(self, name):
self.name = name def meet(self,girl_friend=None):
self.girl_friend = girl_friend def have_diner(self):
if self.girl_friend:
print(f'{self.name}请{self.girl_friend.name}一起吃六块钱的麻辣烫')
else:
print('单身狗,看别人吃') class Girl: def __init__(self, name, age):
self.name = name
self.age = age
# 操作1
wu = Boy('吴超')
# wu.have_diner()
# 输出结果
单身狗,吃什么吃
# flower = Girl('如花', 48) # 操作2
flower = Girl('如花', 48)
# 组合: 将一个类的对象封装成另一个类的对象的属性中
wu.meet(flower)
# 输出结果
吴超请如花一起吃六块钱麻辣烫

敲十遍的练习题

class GameRole: # 定义一个游戏的类

    def __init__(self, name, ad, hp): # 设置默认方法:姓名,攻击力,血量

        self.name = name
self.ad = ad
self.hp = hp def attack(self,p1): # 设置一个攻击的方法,传入的值是,被攻击人的名字
p1.hp = p1.hp - self.ad # 传入被攻击人的血量等于被攻击人原来的血量减去攻击人的攻击力
print(f'{self.name}攻击{p1.name},{p1.name}掉了{self.ad}血,还剩{p1.hp}血') # 这里self.name就是攻击人的名字,p1是被攻击人的名字,被攻击人掉的血也就是是攻击人的攻击力,还剩下的血量是被攻击人之前的血量减去攻击人的攻击力 def equit_weapon(self,wea):# 定义了一个装备武器的方法,传入的值是
self.weapon = wea class Weapon: def __init__(self, name, ad):
self.name = name
self.ad = ad def attick(self, p1, p2):
self.p1 = p1
self.p2 = p2 print(f'{self.p1}使用{self.name}攻击了{self.p2},{self.p2}掉了{self.ad}血') gailun = GameRole('盖伦', 100, 10) #传入一个 盖伦的对象属性
jianhao = GameRole('剑豪', 200, 20) gailun_gj = Weapon('青龙偃月刀', 20)
jianhao_gj = Weapon('九门大提督枪', 30) gailun.equit_weapon(gailun_gj) #
jianhao.equit_weapon(jianhao_gj)
gailun.weapon.attick('盖伦', '剑豪')
jianhao.weapon.attick('剑豪', '盖伦')

一句话总结:

依赖关系:   就是将一个类的类名或者对象传给另一个类的方法中
组合关系就是,将一个类的对象封装到另一个类的对象的属性中,以如花为例,将类Girl('如花', 48)的实例化后的对象flower封装到另一个类Boy('吴超')的实例化对象wu的meet属性中,用wu.meet(flower)表示

继承关系

class A:
pass class B:
pass

python之面向对象的关系的更多相关文章

  1. Python进阶---面向对象的程序设计思想

    Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  2. Python之面向对象一

    引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...

  3. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  4. python基础——面向对象的程序设计

    python基础--面向对象的程序设计 1 什么是面向对象的程序设计 面向过程的程序设计的核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...

  5. python学习------面向对象的程序设计

    一 面向对象的程序设计的由来 1940年以前:面向机器 最早的程序设计都是采用机器语言来编写的,直接使用二进制码来表示机器能够识别和执行的指令和数 据.简单来说,就是直接编写 和 的序列来代表程序语言 ...

  6. 【转】Python之面向对象与类

    [转]Python之面向对象与类 本节内容 面向对象的概念 类的封装 类的继承 类的多态 静态方法.类方法 和 属性方法 类的特殊成员方法 继承层级关系中子类的实例对象对属性的查找顺序问题 一.面向对 ...

  7. python 历险记(二)— python 的面向对象

    目录 前言 类和对象 如何定义和实例化类? 如何定义和使用属性? 什么是方法? 静态方法和普通方法 构造函数该怎么写? str 方法怎么写? 多态是什么? 继承性和 java 是一样的吗? 父类和子类 ...

  8. what's the python之面向对象

    编程分为面向过程和面向对象,首先我们要了解什么是面向对象. 面向对象 面向过程就是我们之前学的内容,主要是函数式,其核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全 ...

  9. Python学习---面向对象的学习[基础]

    面向对象 面向对象的三大特性是指:封装.继承和多态. 说明: Python可以函数式编程,也可以面向对象编程 l 面向过程:根据业务逻辑从上到下写垒代码 l 函数式 :将某功能代码封装到函数中,日后便 ...

随机推荐

  1. brup安装证书抓取https

    brup安装证书抓取https 0x00下载 下载安装brup 前提是需要java环境 0X01配置brup 配置brup的代理设置 0X02设置浏览器 我使用的是火狐,以下都以火狐为例 0X03证书 ...

  2. 54-with管理文件操作上下文

    目录 with管理文件操作上下文 with管理文件操作上下文 之前我们使用open()方法操作文件,但是open打开文件后我们还需要手动释放文件对操作系统的占用.其实我们可以更方便的打开文件,即Pyt ...

  3. Python第一周基本语句学习整理

    目录 Python第一周基本语句学习整理 一.字符串切割 二.体重单位转换 三.计算器的实现 四.猜年龄游戏 Python第一周基本语句学习整理 一.字符串切割 代码实现: s = 'luowenxi ...

  4. java网络编程——socket实现简单的CS会话

    还记得当年学计网课时用python实现一个简单的CS会话功能,这也是学习socket网络编程的第一步,现改用java重新实现,以此记录. 客户端 import java.io.*; import ja ...

  5. HTTP入门(一):在Bash中curl查看请求与响应

    HTTP入门(一):在Bash中curl查看请求与响应 本文简单总结HTTP的请求与响应. 本文主要目的是对学习内容进行总结以及方便日后查阅. 详细教程和原理可以参考HTTP文档(MDN). 本文版权 ...

  6. 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/ZRjGGy 可交互视频 此视频是可 ...

  7. JDBC概述及编程步骤详解

    目录 一.JDBC概述 二.JDBC编程步骤(以MySQL为例) 1.导入jar包 2.加载数据库驱动 3.通过DriverManager获得Connection对象 3.定义SQL语句 4.利用Co ...

  8. 微信WXSS样式文件

    目录 WXSS官方文档 1. WXSS 1.1. 尺寸单位 1.2. 样式导入 1.3. 内联样式 1.4. 选择器 1.5. 全局样式与局部样式 WXSS官方文档 https://developer ...

  9. 移动端1px的适配问题

    先看个概念: window.devicePixelRatio = 物理像素 / dips(独立像素) window.devicePixelRatio是设备的物理像素和独立像素的比例,可以叫设备像素比. ...

  10. Web安全相关(一):CSRF/XSRF(跨站请求伪造)和XSS(跨站脚本)

    XSS(Cross Site Script):跨站脚本,也就是javascript脚本注入,一般在站点中的富文本框,里面发表文章,留言等表单,这种表单一般是写入数据库,然后再某个页面打开. 防御: 1 ...