python 面向对象类与类之间的关系
主要内容:
- 1. 依赖关系
- 2. 关联关系, 组合关系, 聚合关系
- 3. 继承关系
- 4. 类中的特殊成员
引子
- 大千世界, 万物之间皆有规则和规律,我们的类和对象是对大千世界中的所有事物进行归类.
- 那事物之间存在着相对应的关系. 类与类之间也同样如此.
- 在面向对象的世界中. 类与类中存在以下关系:依赖关系 ,关联关系 ,组合关系 ,聚合关系 ,继承关系 ,实现关系
- 由于python是一门弱类型编程语言,并且所有的对象之间其实都是多态的关系.也就是说,所有的东西都可以当做对象来使用. 所以我们在写代码的时候很容易形成以上关系
1. 依赖关系
关于大象进冰箱的问题:
class Elephant:
def __init__(self,name):
self.name = name
def open(self,ref):
print("冰箱,开门吧")
ref.open_door()
def close(self,ref):
print("冰箱关门吧")
ref.close_door()
def enter(self):
print("进冰箱装自己") class Fridge:
def __init__(self):
pass
def open_door(self):
print("冰箱打开了门")
def close_door(self):
print("冰箱关上了门") E=Elephant("tony")
F1=Fridge()
E.open(F1)
E.enter()
E.close(F1)
就是大象和冰箱之间的关系是一种依赖关系,大象可以选择任何一个冰箱(我们可以通过类来创造出很多个 冰箱),甚至作为大象我可以选择冰箱甚至可以进高压锅,可以说此时的大象有选择的权利.
2. 关联关系, 组合关系, 聚合关系
class Boy:
def __init__(self,name,character,girlfriend=None):
self.name = name
self.character = character
self.girlfriend = girlfriend
def xiangqin(self,girl):
self.girlfriend = girl
def eat(self):
if self.girlfriend:
print("吃东西好难,吃啥都不对")
else:
print("单身狗,狗粮够吗")
class Girl:
def __init__(self,name,boyfriend):
self.name = name
self.boyfriend =boyfriend
def eat(self):
print ("%s在吃饭" % self.name) g = Girl("排骨精","八戒")
b = Boy("猪八戒","呵呵")
b.xiangqin(g)
b.eat()
这是典型的一对一的关联关系,两个类的对象紧密练习着,关联关系, 其实就是我需要你,你也属于我这就是关联关系
class School:
def __init__(self,name,address,phone):
self.name = name
self.address = address
self.phone = phone
self.__teach_list = []
def zhaopin(self,t):
self.__teach_list.append(t)
def display(self):
for el in self.__teach_list:
print(el.name,el.hobby) class Teacher:
def __init__(self,name,gender,salary,hobby,school):
self.name = name
self.gender = gender
self.salary = salary
self.hobby = hobby
self.school = school oldboy_bj = School("北京老男孩", "美丽富饶的沙河", "10086")
oldboy_sh = School("北京老男孩, 上海分校", "上海浦东", "10010")
oldboy_sz = School("北京老男孩, 深圳分校(骑士计划)", "南山区", "10000") t1 = Teacher("配齐", "男", 200000, "上课", oldboy_bj)
t2 = Teacher("太白", "男", 150000, "开车", oldboy_bj)
t3 = Teacher("Eggon", "男", 123456, "钻研技术", oldboy_sh)
t4 = Teacher("高鑫", "女", 45678, "相夫教子", oldboy_sz)
t5 = Teacher("日天", "男", 666, "看天", oldboy_sz) oldboy_bj.zhaopin(t1)
oldboy_bj.zhaopin(t2)
oldboy_bj.display() oldboy_sh.zhaopin(t3)
oldboy_sz.zhaopin(t4)
oldboy_sz.zhaopin(t5)
oldboy_sz.display()
老师必然属于⼀个学校. 换句话说,每个老师肯定有⼀个指定的工作机构. 就是学校,那老师的属性中必然关联着学校(一对多的情况)
3. 继承关系
class Base:
def __init__(self, num):
self.num = num
def func1(self):
print(self.num)
self.func2()
def func2(self):
print(111, self.num)
class Foo(Base):
def func2(self):
print(222, self.num)
lst = [Base(1), Base(2), Foo(3)]
for obj in lst:
obj.func1()
总结:
- self在访问方法的顺序: 永远先找自己的,自己的找不到再找父类的.
- self就是你访问方法的那个对象,先找自己, 然后在找父类的.
4. 类中的特殊成员
python 面向对象类与类之间的关系的更多相关文章
- python面向对象与结构成员之间的关系
1面向对象结构分析:----面向对象整体大致分为两块区域:-------第一部分:静态字段(静态变量)部分-------第二部分:方法部分--每个区块可以分为多个小部分 class A: countr ...
- Python面向对象02/类的空间问题、类与对象之间的关系、类与类之间的关系
Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 2. 类与对象之间 ...
- python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系
https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...
- JAVA面向对象-----接口与类、接口之间的关系
接口与类.接口之间的关系 大家之前都知道类与类之间的关系继承,那么接口与类之间又是怎样子的关系呢? 接口与类之间是实现关系.非抽象类实现接口时,必须把接口里面的所有方法实现.类实现接口用关键字impl ...
- Python面向对象06 /元类type、反射、函数与类的区别、特殊的双下方法
Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3 ...
- PHP类和对象之间的关系
类是对象的描述: 类和对象之间的关系类似于建房子的图纸和房子: 创建类--new对象--用对象: 一.对象的两个特性: --对象的行为(功能):可以对对象施加操作,例如,电视机的开.关.转换频道: - ...
- Python面向对象之接口类(抽象类)
Python面向对象之接口类(抽象类):就是制定一个规范. 比如定义了一个接口类(抽象类)(他们是不可以进行实例化的,这就是他为什么是制定一个规范的原因). 他的定义是需要abc模块,要变的就是他的方 ...
- python包管理工具他们之间的关系
python包管理工具之间的关系 现在的python包管理工具有很多,非常混乱,必须理清他们之间的关系才能更好的使用python构建强大的包关系系统工具. 首先:python官方推荐的第三方库是PyP ...
- Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作
Python进阶----表与表之间的关系(一对一,一对多,多对多),增删改查操作,单表查询,多表查询 一丶表与表之间的关系 背景: 由于如果只使用一张表存储所有的数据,就会操作数 ...
- Python面向对象1:类与对象
Python的面向对象- 面向对象编程 - 基础 - 公有私有 - 继承 - 组合,Mixin- 魔法函数 - 魔法函数概述 - 构造类魔法函数 - 运算类魔法函数 # 1. 面向对象概述(Objec ...
随机推荐
- javaSystem.out.println()输出byte[]和char[]异常的问题
javaSystem.out.println()输出byte[]和char[]异常的问题 今天 突然有人问我他写的byte[]和char[],在用System.out.println()输出的时候所得 ...
- CSS 兼容性支持
CSS 兼容性支持 在一个CSS属性还没有成为标准之前,各浏览器厂商已经做了这个属性的实现,可能各浏览器实现不尽相同,所以加入属性前缀区分. safari , chrome:-webkit- oper ...
- easyui datagrid 显示 footer
1.设置 showFooter为true $grid = $dg.datagrid({ // fit: true, //fitColumns: true, // pagination: false, ...
- css浮动布局小技巧
父元素如何围住浮动的子元素的三种办法: 一.为父元素应用overflow:hidden. overflow真正用途是防止包含元素被大的内容撑开,设定了宽度之后,包含元素将超过容器的内容减掉:而它还有另 ...
- Eclipse Startup
First of all, we take a look at class EclipseStarter /********************************************** ...
- 如何将bug杀死在摇篮里?
阿里妹导读:在欧洲中世纪的传说中,有一种叫“人狼”的妖怪,就是人面狼身.它们会讲人话,专在月圆之夜去袭击人类.而且传说中对“人狼”用一般的枪弹是不起作用的,普通子弹都伤不到也打不死它,只有一种用银子作 ...
- 在科技圈不懂“机器学习”?那你就out了
当联网的终端设备越来越多时,产生的信息数据也将呈指数式增长,大型.复杂.增长快速的数据收集已经无处不在.而机器学习能够扩增这些数据的价值,并基于这些趋势提出更广泛的应用情境. 那么,被人们津津乐道的机 ...
- Azure镜像市场再下一城,中标软件入驻开启Azure国产操作系统时代
近日,中标软件成功入驻 Azure 镜像市场,提供中标麒麟 Linux 的产品镜像服务,这样一来,中标麒麟也成为国内唯一能够在 Azure 公有云上运行的国产操作系统产品. 作为国内操作系统的领头羊, ...
- C#设计模式之代理模式(二)
15.3 代理模式应用实例 下面通过一个应用实例来进一步学习和理解代理模式. 1. 实例说明 某软件公司承接了某信息咨询公司的收费商务信息查询系统的开发任务,该系统的基本需 ...
- Oracle分析函数列表分享
SUM :该函数计算组中表达式的累积和 MIN :在一个组中的数据窗口中查找表达式的最小值 MAX :在一个组中的数据窗口中查找表达式的最大值 AVG ...