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. 强制执行父类下的__init__

    两种方式: 1.super(子类,self)__init__() 2.子类.__init__(self) 推荐使用super

  2. 菜单特效jq

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. [转帖]支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么?

    支撑双11每秒17.5万单事务 阿里巴巴对JVM都做了些什么? https://mp.weixin.qq.com/s?__biz=MzA3OTg5NjcyMg==&mid=2661671930 ...

  4. redis 持久化 ——RDB

    文章目录 RDB 关于 fork dump.rdb 文件 如何触发 RDB 快照 如何恢复 优势 劣势 停掉 RDB RDB redis database 的简写 : 在指定时间间隔后,将内存中的数据 ...

  5. 【C++札记】引用

    介绍 引用是C++中特有的语法,在C语言中不存在. 本质上引用(reference)就是指针,在类型名后面加上一个&号就是引用类型. 1.指针与引用的定义进行比较 指针定义: 引用定义: in ...

  6. 把cgrep mgrep集成到bashrc

    https://android.googlesource.com/platform/build/+/android-4.4.3_r1/envsetup.sh 在~/.bashrc里面增加: #Andr ...

  7. 第2章:LeetCode--第二部分

    本部分是非Top的一些常见题型及不常见题 LeetCode -- Longest Palindromic Substring class Solution { public: int isPalind ...

  8. 怎样理解数组的空元素empty与undefined的区别

    数组的空元素empty表示空位, 它不是一种数据类型, 而是由于人为修改arr.length 或者写入时多写了逗号造成的. var arr = [1,2,3,4,,,5]; arr.length; a ...

  9. [前端]多线程在前端的应用——Javascript的线程

    JavaScript 是单线程.异步.非阻塞.解释型脚本语言.JavaScript 的设计就是为了处理浏览器网页的交互(DOM操作的处理.UI动画等),决定了它是一门单线程语言.如果有多个线程,它们同 ...

  10. 开启HSTS让浏览器强制跳转HTTPS访问

    开启HSTS让浏览器强制跳转HTTPS访问 来源 https://www.cnblogs.com/luckcs/articles/6944535.html 在网站全站HTTPS后,如果用户手动敲入网站 ...