python_面向对象——对象之间的关联关系
1.将类中的对象关联起来(简单的方法)
class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
self.parter = None #先置空,后面赋值(用于关联对象)
def do_private_stuff(self):
pass p1 = Person('wdc',22,'男')
p2 = Person('yhf',23,'女') # 双向绑定,将对象关联起来
p1.parter = p2 #将对象p2复制给对象p1的parter属性
p2.parter = p1 #将对象p1复制给对象p2的parter属性
# 打印对象的parter属性,查看其内容。
print(p1.parter.name,p2.parter.name)
解除关系:
class Person:
def __init__(self,name,age,sex):
self.name = name
self.age = age
self.sex = sex
self.parter = None #先置空,后面赋值(用于关联对象)
def do_private_stuff(self):
pass p1 = Person('wdc',22,'男')
p2 = Person('yhf',23,'女') # 双向绑定,将对象关联起来
p1.parter = p2 #将对象p2复制给对象p1的parter属性
p2.parter = p1 #将对象p1复制给对象p2的parter属性
# 打印对象的parter属性,查看其内容。
print(p1.parter.name,p2.parter.name) # 双向接触关联关系
p2.parter = None
p1.parter = None print(p1.parter,p2.parter)
2.将类中对象关联起来(通过类关联)
class Relation:
# 保存对象直接的关系
def __init__(self):
self.couple = [] #创建空列表 def make_couple(self,obj1,obj2):
self.couple = [obj1,obj2] #将传递进来的两个对象保存到同一列表中,关联在一起
print('{}和{}确定了情侣关系...'.format(obj1.name,obj2.name)) def get_my_parter(self,obj):
# 循环列表中的对象,如果不是刚刚传进来的则返回。
for i in self.couple:
if i != obj:
return i
else:
print('你没用对象!')
class Person:
def __init__(self,name,age,sex,relation):
self.name = name
self.age = age
self.sex = sex
self.relation = relation #在每个人的实例中存储关系对象 def do_private_stuff(self):
pass relation_boj = Relation() #创建保存关系的类的对象
p1 = Person('wdc',22,'男',relation_boj)
p2 = Person('yhf',23,'女',relation_boj)
relation_boj.make_couple(p1,p2) #通过对象向方法中传递对象p1和对象p2,让两个人相互关联 p1_obj = p1.relation.get_my_parter(p1) #拿到p1的伴侣的对象(p2)
print('{}的情侣是{}'.format(p1.name,p1_obj.name))
p2_obj = p2.relation.get_my_parter(p2) #拿到p2的伴侣的对象(p1)
print('{}的情侣是{}'.format(p2.name,p2_obj.name))
解除关系:
class Relation:
# 保存对象直接的关系
def __init__(self):
self.couple = [] #创建空列表 def make_couple(self,obj1,obj2):
self.couple = [obj1,obj2] #将传递进来的两个对象保存到同一列表中,关联在一起
print('{}和{}确定了情侣关系...'.format(obj1.name,obj2.name)) def get_my_parter(self,obj):
# 循环列表中的对象,如果不是刚刚传进来的则返回。
for i in self.couple:
if i != obj:
return i
else:
print('你没有对象!') def break_up(self,obj):
print('{}主动解除了关系!'.format(obj.name))
self.couple.clear() #清空列表,解除关系
class Person:
def __init__(self,name,age,sex,relation):
self.name = name
self.age = age
self.sex = sex
self.relation = relation #在每个人的实例中存储关系对象 def do_private_stuff(self):
pass relation_boj = Relation() #创建保存关系的类的对象
p1 = Person('wdc',22,'男',relation_boj)
p2 = Person('yhf',23,'女',relation_boj)
relation_boj.make_couple(p1,p2) #通过对象向方法中传递对象p1和对象p2,让两个人相互关联 p1.relation.break_up(p1) #通过p1解除关系
#或通过p2解除关系:p2.relation.break_up() p1_obj = p1.relation.get_my_parter(p1) #拿到p1的伴侣的对象(p2) p2_obj = p2.relation.get_my_parter(p2) #拿到p2的伴侣的对象(p1)
python_面向对象——对象之间的关联关系的更多相关文章
- python_面向对象——对象间的组合关系
# 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行. class Dog: #狗 def __init__(self,name,dog_type,attack ...
- python_面向对象——类之间的依赖关系
class Dog: def __init__(self,name,age,master): self.name = name self.age = age self.master = master ...
- 2.java面向对象类与类/类与对象之间关系详解
继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...
- JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链
相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- python_面向对象,类名称空间,对象名称空间,组合
创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量(字段) 动态属性就是定义在类中的方法 其中类 ...
- 依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)
依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见 ...
随机推荐
- 微信小程序获取windowHeight出现不同页面高度不一致问题及解决方案
在页面中调用wx.getSystemInfo即可获取当前页面的屏幕高度,如果写在app.js里面或者带有系统tab页面里面,获取的windowHeight会比不是tab的页面少48: 含有的TabBa ...
- 论文阅读 | Transformer-XL: Attentive Language Models beyond a Fixed-Length Context
0 简述 Transformer最大的问题:在语言建模时的设置受到固定长度上下文的限制. 本文提出的Transformer-XL,使学习不再仅仅依赖于定长,且不破坏时间的相关性. Transforme ...
- Asp.Net Core中的角色
在前面介绍中我们知道了Asp.Net Core Identity中创建用户使用到的类UserManager<IdentityUser>,同样的,创建角色我们需要使用RoleManager& ...
- 如何解决error: failed to push some refs
$ git push -u origin master To github.com:a653398363/testtest.git ! [rejected] master -> master ( ...
- Neo4j常用的查询
一.添加操作 1. 添加节点: create (x:学生{studentId:'1001',age:20} 2. 添加关系: 对现有的节点添加关系 match (x:学生{studentId:1001 ...
- 《Mysql - 字符串索引应该如何建立?》
一:概述 - 我有一个需求是需要邮箱登录的, - mysql> select f1, f2 from SUser where email='xxx'; - 我们知道,如果不在 email 上建立 ...
- 《Mysql 一条 SQL 更新语句是如何执行的?(Redo log)》
一:更新流程 - 对于更新来说,也同样会根据 SQL 的执行流程进行. - - 连接器 - 连接数据库,具体的不做赘述. - 查询缓存 - 在一个表上有更新的时候,跟这个表有关的查询缓存会失效. - ...
- Thinking In Java 4th Chap7 复用类
复用代码的两种方法:组合和继承 组合方法:(新类中产生现有类的对象) 没什么好说的,就是调用别类的对象而已 值得一提的是一个特殊方法:toString()当需要一个String却只有对象时能够自动调用 ...
- Java中 final和static解析
一.final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理 ...
- 利用Python进行数据分析_Pandas_数据加载、存储与文件格式
申明:本系列文章是自己在学习<利用Python进行数据分析>这本书的过程中,为了方便后期自己巩固知识而整理. 1 pandas读取文件的解析函数 read_csv 读取带分隔符的数据,默认 ...