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_面向对象——对象之间的关联关系的更多相关文章

  1. python_面向对象——对象间的组合关系

    # 由一堆组件构成一个完整的实体,组建本身独立,但又不能自己运行,必须跟宿主组合在一起,运行. class Dog: #狗 def __init__(self,name,dog_type,attack ...

  2. python_面向对象——类之间的依赖关系

    class Dog: def __init__(self,name,age,master): self.name = name self.age = age self.master = master ...

  3. 2.java面向对象类与类/类与对象之间关系详解

    继承.实现.依赖.关联.聚合.组合的联系与区别 下面的内容很基础,同时也很简单,但是也很重要. 继承 指的是一个类(称为子类.子接口)继承另外的一个类(称为父类.父接口)的功能,并可以增加它自己的新功 ...

  4. JS面向对象(2) -- this的使用,对象之间的赋值,for...in语句,delete使用,成员方法,json对象的使用,prototype的使用,原型继承与原型链

    相关链接: JS面向对象(1) -- 简介,入门,系统常用类,自定义类,constructor,typeof,instanceof,对象在内存中的表现形式 JS面向对象(2) -- this的使用,对 ...

  5. Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系

    Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...

  6. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  7. python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)

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

  8. python_面向对象,类名称空间,对象名称空间,组合

    创建一个类就会创建一个类的名称空间,用来存储类中定义的所有名字,这些名字称为类的属性 而类有两种属性:静态属性和动态属性 静态属性就是直接在类中定义的变量(字段) 动态属性就是定义在类中的方法 其中类 ...

  9. 依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦(转good)

    依赖注入(DI)有助于应用对象之间的解耦,而面向切面编程(AOP)有助于横切关注点与所影响的对象之间的解耦.所谓横切关注点,即影响应用多处的功能,这些功能各个应用模块都需要,但又不是其主要关注点,常见 ...

随机推荐

  1. redis 实现登陆次数限制

    title: redis-login-limitation 利用 redis 实现登陆次数限制, 注解 + aop, 核心代码很简单. 基本思路 比如希望达到的要求是这样: 在 1min 内登陆异常次 ...

  2. es查询优化思路

    尽可能的利用内存 将尽可能的索引留在内存,即留更多的堆外内存给es 不查询的字段尽量不要往es插入,节省索引的空间大小(es + hbase) 数据预热 冷热数据分离 文档字段设计 根据查询场景设计字 ...

  3. 关于 磁盘 I/O 的工作机制那些事

    总有一些你我看不见的东西,存在与你我周围 <深入分析 javaW 技术内幕> 读书感悟 作者 :淮左白衣 写于2018年4月11日19:35:06 写在前面的话 字节与字符的转换桥梁 用户 ...

  4. python3 获取自建gitlab用户提交信息

    #!/usr/bin/env python # -*- coding: utf-8 -*- # @Time : 2019-12-03 14:20 # @Author : Anthony # @Emai ...

  5. 使用google的guova开发高并发下的接口限流

    使用google的guova开发高并发下的接口限流 使用google的guova进行限流 1.guova的限流方式,在定时产生定量的令牌,令牌的数量限制了流量 2.增加一个订单接口限流类OrderRa ...

  6. DMA—直接存储器访问

    DMA 简介 DMA(Direct Memory Access)—直接存储器存取,是单片机的一个外设,它的主要功能是用来搬数据,但是不需要占用 CPU,即在传输数据的时候,CPU 可以干其他的事情,好 ...

  7. Bloom过滤器

    提出一个问题 在我们细述Bloom过滤器之前,我们先抛出一个问题:给你一个巨大的数据集(百万级.亿级......),怎么判断一个元素是否在此数据集中?或者怎么判断一个元素不在此数据集中? 思考这个问题 ...

  8. Myatis之bind标签

    myBatis的bind的标签,一般的用法都是 <if test="name!= null and name!= '' "> <bind name="u ...

  9. 修改win7 iis上传文件大小限制200KB

    win7 iis 修改上传限制,需要修改2个地方: 1,“双击“Internet 信息服务(IIS)管理器”中的“ASP”– 打开“配置 ASP 应用程序的属性”–展开“限制属性”:修改“最大请求实体 ...

  10. c#入门学习笔记

    Hello World //打印语句 Console.WriteLine("Hello World"); //暂停 Console.ReadKey(); 数据类型 1.值类型 by ...