关联:面向对象编程当中的关联关系【python】

面向对象编程当中的关联关系

有关面对对象关联的文字解释如下:

关联关系
概念
对象和对象之间的连接。类A关联类B的意思是,如果实例化一个A类的对象,同时会有一个B类的对象被实例化。也就是说,B作为A的属性存在。在Java中,关联关系的代码表现形式为一个类作为另一个类的属性类型存在。 是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。给定有关联的两个类,可以从一个类的对象得到另一个类的对象。 两个类之间的简单关联表示了两个同等地位类之间的结构关系。当要表示结构化关系时使用关联。

定义
A类关联B类,指的是B类对象作为A类的属性存在,称为"has-a"关联关系。

生命周期
如果A类关联B类,那么创建A类的对象时实例化B类的对象,直到A类被销毁,所关联的B类对象也被销毁。即只要A类对象存在,B类对象就存在。

分类
关联关系分为单向关联和双向关联

单向关联:A类关联B类
双向关联:A类关联B类,B类关联A类
关联还有一对一关联和一对多关联

特点
如果两个互相关联的类中有整体和部分的关系,关联关系分为:聚合和组合,主要区别在于生命周期不同。

下面直接上代码来演示到底什么叫做关联以及如何构造一个具有关联关系的类?

简单关联方法:利用同一个类当中的构造函数--可以通过双向绑定进行简单的关联,将两个人关联在一起

'''
1、简单关联方法:利用同一个类当中的构造函数--可以通过双向绑定进行简单的关联,将两个人关联在一起
'''
class Person:
    def __init__(self,name,sex,age):
        self.name=name
        self.age=age
        self.sex=sex
        self.partener=None  #要明确知道这个partener传进去的是一个对象
    def privote_behivaor(self):
        pass
#关联一般都是进行双向绑定,双向关联
p1=Person('小红','男',11)
p2=Person('小李','女',15)
p1.partener=p2
p2.partener=p1
print(p1.partener.name,p2.partener.name)
#当解除关联关系的时候,也必须进行双向解除关联
p1.partener=None
p2.partener=None
print(p1.partener,p2.partener)
'''
这种方式只是一个低级的双向绑定方式,在写代码的过程中很容易使得少写一个绑定方式,使得变成单向的依赖关系!!

#关联一般都是进行双向绑定,双向关联
p1=Person('小红','男',11)
p2=Person('小李','女',15)
p1.partener=p2
p2.partener=p1

可以看到必须写两行代码对p1,p2进行双向的绑定和关联操作

这种方式只是一个低级的双向绑定方式,在写代码的过程中很容易少写一个绑定方式,使得变成单向的依赖关系!!

下面介绍一种同步的双向绑定方法: 单独设置一种类将其关联在一起!!

'''
2、下面介绍一种同步的双向绑定方法:
    单独设置一种类将其关联在一起!!
'''
class Relationship:
    def __init__(self):
        self.couple=[]

    def make_relationship(self,obj1,obj2):
        #obj1 和 obj2 都作为对象传到这个方法当中去
        self.couple=[obj1,obj2]
        print('%s和%s成为一对!!'%(obj1.name,obj2.name))

    def get_relationship(self,obj):
        print('寻找%s的对象:'%obj.name)
        for i in self.couple:
            if i != obj:
                return i.name
        else:
            print("他没有对象!!!")


    def delete_relationship(self):
        print('%s和%s的情侣关系已解除!!'%(self.couple[0].name,self.couple[1].name))
        self.couple.clear()

class Person:
    def __init__(self,name,sex,age,relation):
        self.name=name
        self.age=age
        self.sex=sex
        self.relation=relation #在每个人的实例当中存储关系对象

    def privote_behivaor(self):
        pass
relation=Relationship()
p1=Person('小李','男',21,relation)
p2=Person('小张','女',22,relation)
relation.make_relationship(p1,p2)

print(p1.relation.couple)
'''
若需要打印名字,由于couple是列表类型,可以单独设置一个方法进行循环获取名字
'''
print(p1.relation.get_relationship(p1))
p1.relation.delete_relationship()

print(p2.relation.get_relationship(p2))

 def make_relationship(self,obj1,obj2):
        #obj1 和 obj2 都作为对象传到这个方法当中去
        self.couple=[obj1,obj2]
        print('%s和%s成为一对!!'%(obj1.name,obj2.name))

设置一个列表单独将对象1和对象2结合在一起,值得主注意的是要是想输出这个列表,需要用循环语句去进行遍历操作!!

接下里分析两个常见的错误内容:

   Error:'int' object is not callable:

错误原因:    变量名和函数名写重复

当这两个名称重复时,程序会默认调用Int型对象,但Int对象没有什么调用可言,就爆出了这个错误

解决方法也很简单,要么更改变量名,要么更改方法名。

执行代码的时候,输出的结果中含有一个“None”

错误原因:    因为python中print函数需要返回值,如果你在print函数中所放的函数没有返回值,那么print将会return None

简单点来说就是你的print(x)当中的x为空值,所以会返回一个none,注意有时候x是一个函数的时候已经函数x中的print已经输出完了,你又对x进行外面加一个print就经常会出现None

1、什么是类?

def Dog(name,d_type):{



}

该部分其实就是一个类,类中定义了这些对象的都具备的属性、共同的方法

2、什么是对象?

说简单一点,对象就是实实在在的东西!!---实体

d3=Dog('tiger','泰迪')
d4=Dog('贝贝','柯基')

d3,d4相当于现实世界当中实实在在存在的实体,即就叫做对象!!

3、什么叫做实例化?

说简单一点就是模板调用的过程(类的调用过程)就叫做实例化!!--实例化之后产生的东西就叫做对象

4、什么是封装?

def Dog(name,d_type):
    dog1 = {
        'name': name,
        'd_type': d_type,
        #'attack': 18,
        'year': 10
    }
    if d_type in attack:
        Dog["attack"]=attack[d_type]
    else:
        dog1["attack"]=15
    return dog1

假设在这里我创建了一个狗类的方法和一个人类的方法,所谓封装可以简单的理解为:狗类的方法人理论上是不运行人去调用的!

多态和继承我会在后续代码中进行详细讲解!!

类的基本语法:

        1、为了编程的规范:python中类首字母应该大写

            直接就可以在类中定义属性
            像下面这种在类中直接定义的属性,叫做类属性、类变量(是所有对象都可以公共共享的一个属性)

            类中的方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身

class Dog:
    #直接就可以在类中定义属性
    # 像下面这种在类中直接定义的属性,叫做类属性、类变量
    d_type='泰迪'
    def hello(self):    #方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身
        print('Hello!,I am a',self.d_type)

             当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象


 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏天的学习日记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值