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. php 将图片文件转成base64编码的方法

    php 将图片文件转成base64编码的方法<pre><?php /** 文件转base64输出 * @param String $file 文件路径 * @return Strin ...

  2. CNN-1: LeNet-5 卷积神经网络模型

    1.LeNet-5模型简介 LeNet-5 模型是 Yann LeCun 教授于 1998 年在论文 Gradient-based learning applied to document      ...

  3. kubernetes 部署ingress

    kubernetes Ingess 是有2部分组成,Ingress Controller 和Ingress服务组成,常用的Ingress Controller 是ingress-nginx,工作的原理 ...

  4. 【LOJ】#2137. 「ZJOI2015」诸神眷顾的幻想乡

    我居然到了国赛之前才学习怎么做广义后缀自动机 这个题目--意思是--有20个叶子,肯定一条路径都是任意一个叶子为根,一个从某个点往祖先走的路径 这样的话我们可以按照dfs序,从每个节点的父亲那里的后缀 ...

  5. TypeScript 高级类型

    ⒈交叉类型(Intersection Types) 交叉类型是将多个类型合并为一个类型. 这让我们可以把现有的多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性. 例如, Person &a ...

  6. Spring Boot系列教程十:Spring boot集成MyBatis

    一.创建项目         项目名称为 "springboot_mybatis_demo",创建过程中勾选 "Web","MyBatis" ...

  7. 利用Python进行数据分析 第4章 IPython的安装与使用简述

    本篇开始,结合前面所学的Python基础,开始进行实战学习.学习书目为<利用Python进行数据分析>韦斯-麦金尼 著. 之前跳过本书的前述基础部分(因为跟之前所学的<Python基 ...

  8. Eclipse一些技巧

    1:测试某个测试溢出,修改堆内存大小 // 模拟内存溢出 -Xms10m -Xmx10m private static void mockOOM() { List list = new ArrayLi ...

  9. 剑指offer(5)——从尾到头打印链表

    题目: 输入一个链表的头结点,从尾到头反过来打印出每个结点的值.结点定义如下: public class ListNode { int val; ListNode next = null; ListN ...

  10. Codeforces Round #557 Div. 1 based on Forethought Future Cup - Final Round

    A:开场就读错题.读对了之后也没啥好说的. #include<bits/stdc++.h> using namespace std; #define ll long long #defin ...