类之间的依赖关系:

  八股文如下:

依赖关系是最常见的一种关系,是一种使用关系,即一个类的实现(或部分方法的实现)需要另外一个类的协助,所以应尽量避免双向的互相依赖关系;

对象 A 持有对象 B 的引用,对象 A 需要借助对象 B 的协助,假如 A 是一个类,那么 B 可以是局部变量,也可以是类中方法参数,或者对静态方法的调用;(对象 A 可以依赖B,也可以不依赖 B,用到了有 B 的部分方法就依赖了 B)

直接上代码:

首先展示一个简单的类之间的交互:(这里以人狗大战为例)

#类之间的简单交互操作
class Dog:def __init__(self,name,breed,attack_val):self.name=nameself.breed=breedself.attack_val=attack_valself.life_val=100def bite(self,person):#狗可以咬人,从这里传进来一个人的对象person.life_val-=self.attack_val  #狗咬人,人的生命值根据狗的攻击力而下降print('狗:',self.name,'咬了人:',person.name,self.attack_val,'滴血。人还剩:',person.life_val,'滴血!!')class Person:role='person'   #人类的角色属性都是人def __init__(self,name,sex,attack_val):self.name=nameself.sex=sexself.attack_val=attack_valself.life_val= 100def attack(self,dog):#人可以攻击狗,从这里传进来的dog是狗对象#人攻击狗,狗的生命值根据人的攻击力下降dog.life_val-=self.attack_valprint('人:',self.name,'打了狗:',dog.name,self.attack_val,'滴血。狗还剩:',dog.life_val,'滴血!!')#类的实例化,类实例化完之后,变成一个真正的实体--对象
d1=Dog('小贝','柯基',10)d2=Dog('小金','金毛',20)p1=Person('小王','男',30)#两个对象之间的交互,一般通过类方法进行交互
p1.attack(d1)
d1.bite(p1)'''
类之间的关系包括:1、依赖关系:狗和主人的关系2、关联关系:和我们的同学3、组合关系:人体器官组合---组合关系比聚合关系还要紧密:人如果死亡,这些器官也会随之死亡4、聚合关系:电脑配件:如何电脑死了,但是其中的显示器,cpu等都还可以继续操作5、继承关系:类的三大特性之一:子承父业
'''
#依赖关系:
#狗和主人的关系,可以理解为一种依赖关系,如果没有主人,狗就可能变成流量狗,可能会死

接下来展示如何实现类之间的依赖关系?

#依赖关系:
#狗和主人的关系,可以理解为一种依赖关系,如果没有主人,狗就可能变成流量狗,可能会死
class Dog:def __init__(self,name,sex,age,master):self.name=nameself.sex=sexself.age=ageself.master=master  #这里需要注意的是绑定的是键盘输入的实例,这里的master实例是对象,将人的属性绑定到狗类的实例当中def sayhi(self):print('hello,my name is %s,my age is %s,%s is my master!!'%(self.name,self.age,self.master.name))class Person:def __init__(self,name,sex,age):self.name=nameself.sex=sexself.age=age
'''
一般在构造函数中绑定另一个类的对象可以称之为依赖关系--只能够单向绑定,不能够双向绑定!也就是说只能够一个依赖另一个,不能够双向依赖双向依赖一般都代表着   关联关系!!
'''p1=Person('小王','20','11')
#在狗的实例化当中将对象p1传进d1当中,这种方式就叫做依赖关系
d1=Dog('小贝','公狗','5',p1)
d1.sayhi()

注解:在这里我们可以看到将人的对象传入狗类的构造函数的master实例属性中去,实现了单向的绑定操作,这种操作也称之为依赖关系!!

一般在构造函数中绑定另一个类的对象可以称之为依赖关系--只能够单向绑定,不能够双向绑定!也就是说只能够一个依赖另一个,不能够双向依赖
    双向依赖一般都代表着   关联关系!!

(1)类B以参数的形式传入类A的方法。我个人将它就取名为“参数依赖”。
(2)类B以局部变量的形式存在于类A的方法中。我个人将它就取名为“局部依赖”。
(3)类A调用类B的静态属性或方法。我个人将它就取名为“静态依赖”。
UML图中实现使用一条带有箭头的虚线指向被依赖的类

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"]=15return dog1

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

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

类的基本语法:

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

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

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

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

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

       当我们实例化一个对象之后,就可以通过对象去调用类中的方法
'''
1、调用类中的方法: 实例.方法
2、调用类中的属性:  实例.属性
'''(#小写的f代表类属性,大写的F代表普通函数)
#当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象
D1=Dog()    #生成了一个实例
D2=Dog()
#当我们实例化一个对象之后,就可以通过对象去调用类中的方法
D1.hello()
'''
1、调用类中的方法: 实例.方法
2、调用类中的属性:  实例.属性
'''
#小写的f代表类属性,大写的F代表普通函数
D1.d_type

问题:我们如何定义对象之间私有的属性(只属于自己的属性)?

答:定义初始化方法又叫做构造方法、构造函数,实例化时进行一些初始化工作(自动进行执行)

在类中定义初始化方法:

    def __init__(self,name,age,sex):#初始化方法,构造方法,构造函数,实例化时会自动执行,进行一些初始化工作#要想把name ,age 两个值,真正的存到实例种去,就要把2个值和实例去进行绑定--self存在意义self.name=name  #绑定参数值到实例中去self.age=ageself.sex=sex    #相当于D.sex=" 雄性"

2、self用什么实际意义?

以上述代码进行举例:

要想把name ,age 两个值,真正的存到实例种去,就要把2个值和实例去进行绑定--self存在意义

#为了编程的规范:python中类首字母应该大写
class Dog:#直接就可以在类中定义属性# 像下面这种在类中直接定义的属性,叫做类属性、类变量d_type='泰迪'def hello(self):    #方法:第一个参数必须是self(也可以是其他名字)---这里的self代表实例本身print('Hello!,I am a',self.d_type,'My name is',self.name,'I am',self.age,'years!')def __init__(self,name,age,sex):#初始化方法,构造方法,构造函数,实例化时会自动执行,进行一些初始化工作#要想把name ,age 两个值,真正的存到实例种去,就要把2个值和实例去进行绑定--self存在意义self.name=name  #绑定参数值到实例中去self.age=ageself.sex=sex    #相当于D.sex=" 雄性"#当类写完之后,我们需要对类进行实例化,将其变成一个真正的实体,对象---python中一切皆对象
D1=Dog('贝贝',2)    #生成了一个实例
D2=Dog('tiger',10)
#当我们实例化一个对象之后,就可以通过对象去调用类中的方法
D1.hello()'''
1、调用类中的方法: 实例.方法
2、调用类中的属性:  实例.属性
'''
#小写的f代表类属性,大写的F代表普通函数
D1.d_type
D1.sex='雄性'
print(D1.sex)

我们也可以直接在类的外部,运用实例化之后的对象进行创建  D1.sex='雄性' 相当于在初始化方法中添加sex属性,并用self进行实例化绑定

def __init__(self,name,age,sex):#初始化方法,构造方法,构造函数,实例化时会自动执行,进行一些初始化工作#要想把name ,age 两个值,真正的存到实例种去,就要把2个值和实例去进行绑定--self存在意义self.name=name  #绑定参数值到实例中去self.age=ageself.sex=sex    #相当于D.sex=" 雄性"

实例属性又叫做成员变量

小总结:

                类属性,类变量,公共属性-----所有实例共享

                实例属性,实例变量,成员变量-------每个实例独享

依赖:类之间的依赖关系【python】相关推荐

  1. 判断类之间的父子关系

    如何判断两个类之间的父子关系? java为我们提供了instanceof运算符,可以用来判断一个对象是否是否个类的实例,所以很容易的想到子类的对象肯定是父类的实例.但是如何所涉及到的类是不可实例化的该 ...

  2. 框架、文档、视图类之间的调用关系

    在多文档MFC应用程序执行过程中,创建了多于一个的文档类.视图类.子框架类对象和一个主框架类.应用类对象.这些对象之间是通过一定的方式联系在一起的,在应用程序设计中,时常需要通过这些对象之间的关系来实 ...

  3. Hibernate中的Entity类之间的继承关系之一MappedSuperclass

    在hibernate中,Entity类可以继承Entity类或非Entity类.但是,关系数据库表之间不存在继承的关系.那么在Entity类之间的继承关系,在数据库表中如何表示呢? Hibernate ...

  4. 某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工、维护部员工)。完成员工体系中所有类的定义,并指定类之间的继承关系。进行xx工程师类的对象创建,完成工作方法的调用。

    某IT公司有多名员工,按员工负责的工作不同,进行了部门的划分(研发部员工.维护部员工).研发部根据所需研发的内容不同,又分为JavaEE工程师.Android工程师:维护部根据所需维护的内容不同,又分 ...

  5. 组合与继承有什么共同点和差异?通过组合生成的类与被组合的类之间的逻辑关系是什么?继承呢?

    组合与继承有什么共同点和差异?通过组合生成的类与被组合的类之间的逻辑关系是什么?继承呢? 组合与继承的?共同点: 都是能够使用已经封装好的类. 组合与继承的差异: 通过组合生成的类一旦消失,被组合生成 ...

  6. 类与类之间的交互关系

    类与类之间都哪些交互关系呢? UML 统一建模语言中定义了六种类之间的关系.它们分别是:泛化.实现.关联.聚合.组合.依赖.关系比较多,而且有些还比较相近,比如聚合和组合,接下来我就逐一讲解一下. 泛 ...

  7. diagram怎么记忆_UML20以上14图的解释、分类记忆方法及类之间6种关系

    UML2.0 分类 以下是教材书上的顺序: (1)类图(Class Diagram). 类图描述一组类. 接口.协作和它们之间的关系.在00系统的建模中,最常见的图就是类图.类图给出了系统的静态设计视 ...

  8. UML类图画法及类之间几种关系

    文章目录如下: 一.类图画法 二.类之间的几种关系:泛化(Generalization).实现(Realization).关联(Association)(又分一般关联.聚合(Aggregation). ...

  9. 【转】类与类之间的常见关系,uml图表示

    看设计模式的时候,以及画UML图的时候经常涉及这样的问题!! 类与类之间的关系: 一般化关系(继承关系):接口与接口,子类和父类,实现接口的类与接口,继承与被继承的类         关联关系:类与类 ...

最新文章

  1. 公式免费转 LaTex 代码,截图、转换一气呵成,每月 1000 次全免费
  2. JavaScript 面向对象 (prototype 原型模式)
  3. 华人博士拿下ACM SIGSOFT杰出博士论文奖,师从北大谢涛教授
  4. 音乐网站购买服务器,怎么样去做一个音乐网站
  5. java 多个 panel_在Java中,每次我向JPanel添加多个东西时,第二...
  6. raise主动引发异常
  7. UBuntu20.04下安装Matlab2015B
  8. sublimeText OmniMarkupPreviewer 404
  9. 微型计算机基础知识,微型计算机的基础知识
  10. CLin 和 IDEA创建文件时自动添加作者和时间信息 + 多个.cpp文件在CLion下运行问题...
  11. Delphi XE2有什么新功能
  12. 模型预测控制(MPC)解析(一):模型
  13. SM2258XT错误代码及中文翻译
  14. 计算机考试怎么复制粘贴文件,复制粘贴,教您电脑复制粘贴不能用了怎么解决...
  15. [实战] 实现抢票小工具短信通知提醒
  16. VR和AR的区别是什么?-粤嵌教育
  17. 数字孪生|数字孪生装备-关键技术和发展阶段
  18. bnu1061 古墓丽影 C语言版
  19. controller 之@...
  20. 64位 Eclipse IDE for Java EE Developers 下载地址

热门文章

  1. 中国古代数学在几何学领域的独特贡献
  2. STM32F407+FreeRTOS+LAN8720+LWIP+STM32CubeMX+DHCP
  3. 12月1日(第三天)
  4. 美国建筑智能服务解决方案提供商indus.ai获370万美元种子融资
  5. 六度分离 ——最短路
  6. java 网页防止刷赞_李洋
  7. bistu新生-1005
  8. 机器视觉(系列二)----图像采集之照明综述
  9. 2019美国大学生数学建模大赛 ICM@2019_Winter 准备:远程协作
  10. 记录了解 aPaaS