一、组合

定义:当几个对象是水平方向的时候,就应该考虑组合,当对象是纵向的时候用继承,组合就是用一个类把2个平级层次的类放在一起,然后实例化就可以了

  1. #现在定义一个类,叫水池,水池里面有鱼和乌龟
    class Turtle:
  2. def __init__(self,x):
  3. self.num = x
  4.  
  5. class Fish:
  6. def __init__(self,y):
  7. self.num = y
  8.  
  9. class Pool:
  10. def __init__(self,x,y):
  11. self.turtle = Turtle(x)
  12. self.fish = Fish(y)
  13.  
  14. def print_num(self):
  15. print('共有%d只乌龟%d条鱼'%(self.turtle.num,self.fish.num))
  16.  
  17. >>> pool = Pool(1,10)
  18. >>> pool.print_num()
  19. 共有1只乌龟10条鱼
  20. >>>

二、什么时候用组合,什么时候用继承

简单的说,组合用于“有一个”的场景,继承用于“是一个”的场景中。例如:水池有一只乌龟,水池有一条鱼,这样的就适合组合;女人是人,鲨鱼是鱼,这样的适合继承

三、类对象什么时候产生

类对象产生于类定义之后,类定义就变成了类对象,可以直接通过“类名.属性”,“类名.方法名()”引用或使用相关的属性或方法

四、如果对象的属性和方法名字相同,会怎样?

属性会覆盖方法

  1. >>> class C:
  2. def x(self):
  3. print('Xman')
  4.  
  5. >>> c = C()
  6. >>> c.x()
  7. Xman
  8. >>> c.x = 1
  9. >>> c.x
  10. 1
  11. >>> c.x()
  12. Traceback (most recent call last):
  13. File "<pyshell#14>", line 1, in <module>
  14. c.x()
  15. TypeError: 'int' object is not callable

五、python严格要求方法需要有实例化才能被调用

  1. >>> class BB:
  2. def printB():
  3. print('no zuo no die')
  4.  
  5. >>> bb = BB()
  6. >>> bb.printBB()
  7. Traceback (most recent call last):
  8. File "<pyshell#20>", line 1, in <module>
  9. bb.printBB()
  10. AttributeError: 'BB' object has no attribute 'printBB'
  11.  
  12. ----printBB()方法没有被实例化,所以调用失败
  1. >>> class BB:
  2. def printBB(self):
  3. print('no zuo no die')
  4.  
  5. >>> bb = BB()
  6. >>> bb.printBB()
  7. no zuo no die
  8. >>>
    ----方法只有被实例化,才能被调

六、在一个类中定义一个变量,用于跟踪该类有多少个实例被创建(当实例化一个对象,这个变量加1,当销毁一个变量,这个变量就自动减1 )

  1. >>> class C:
  2. count = 0
  3. def __init__(self):
  4. C.count +=1
  5. def __del__(self):
  6. C.count -=1
  7.  
  8. >>> a = C()
  9. >>> b =C()
  10. >>> c =C()
  11. >>> C.count
  12. 3
  13.  
  14. >>> del a
  15. >>> C.count
  16. 2
  17.  
  18. >>> del b,c
  19. >>> C.count
  20. 0

【python39--面向对象组合】的更多相关文章

  1. Python 面向对象 组合-多态与多态性-封装-property

    面向对象-组合 1.什么是组合 组合指的是某一个对象拥有一个属性,该属性的值是另外一个类的对象 class Foo: xxx = 111 class Bar: yyy = 222 obj = Foo( ...

  2. 面向对象——组合、封装、访问限制机制、property内置装饰器

    面向对象--组合.封装.访问限制机制.property 组合 什么是组合? 组合指的是一个对象中,包含另一个或多个对象 为什么要组合? 减少代码的冗余 怎么用组合? # 综合实现 # 父类 class ...

  3. 集合类学习之HashMap经典储存 分拣存储与面向对象组合

    HashMap:键值对(key-value) 通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value. 默认是1:1关系(一对一) 存在则覆盖,当key已经存在,则利用新的va ...

  4. linkin大话面向对象--组合

    继承是实现类重用的重要手段,但是它有一个最大的坏处:破坏封装.相比之下,组合也是实现类重用的重要方式,但是采用组合方式实现类重用则能提供更好的封装性.比如人有手一样,在人的类中增加一个手的属性. 何时 ...

  5. python学习日记(面向对象——组合)

    组合指的是,在一个类中以另外一个类的对象作为数据属性,称为类的组合 圆环是由两个圆组成的,圆环的面积是外面圆的面积减去内部圆的面积.圆环的周长是内部圆的周长加上外部圆的周长.这个时候,我们就首先实现一 ...

  6. python day17面向对象-组合

    组合: 给一个类的对象封装一个属性,这个属性是另一个类的对象. class GameRole: def __init__(self, name, ad, hp): self.name = name s ...

  7. JS面向对象——组合使用构造函数模型与原型模型

    该模型为创建自定义类型最常用的方式. <!DOCTYPE html> <html> <head> <title>组合使用构造函数模型和原型模型</ ...

  8. JS面向对象——组合使用构造函数模型与原型模型中的隐患

    组合使用构造函数模型和原型模型中的问题,使用对象字面量重写原型模型会有隐患(涉及到原型的动态性),如下例: <!DOCTYPE html> <html> <head> ...

  9. Python面向对象 组合(选课系统示例)

    # Author : Kelvin # Date : 2019/1/15 20:44 """ 学校与老师关联 课程与老师和学校关联 """ ...

  10. Python 类的名称空间和组合

    一.Python类的名称空间 class Student(object): School = '北京大学' def __init__(self): pass stu1 = Student() stu1 ...

随机推荐

  1. 巧用CurrentThread.Name来统一标识日志记录

    ▄︻┻┳═一Agenda: ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录 ▄︻┻┳═一巧用CurrentThread.Name来统一标识日志记录(续) ▄︻┻┳═一巧用Cur ...

  2. dotnet 命令

    以下用实例串起dotnet常用命令,带你玩转dotnet命令. 1.创建(dotnet new) 首先我们创建一个项目,这里我们创建控制台程序,命令如下图所示. dotnet new dotnet n ...

  3. sql server 中DateName()函数及DatePart()函数

    Datepart():返回代表指定日期的指定日期部分的整数 语法:Datepart(datepart,date)  返回类型:int DateName():返回代表指定日期的指定日期部分的字符串 语法 ...

  4. Java -- 深入浅出GC自动回收机制

    1,去年开春去美团和58同城面试的时候第一个问题基本上都是来说说 Java GC机制,当时年轻的我也很耿直,直接说不会,现在想想还是当时年轻啊.刚好这段时间被各大论坛的面试题刷屏,见到最多的也是也是这 ...

  5. Jenkins实现自动化部署

    首先登录到服务器,目前我所使用的program-DEV环境所在服务器为:IP     登录密码为:密码 1.基础配置 检查所有环境变量: $ env 2.下载安装包安装 JDK:由于本机器已经安装,这 ...

  6. 通过改hosts访问wikipedia

    能访问https://www.wikipedia.org 大部分时候我们是可以访问的wikipedia的主页或是英文首页的,但中文页面却经常被墙,这时候你可以通过在命令行下ping www.wikip ...

  7. 136. Single Number(位运算)

    Given a non-empty array of integers, every element appears twice except for one. Find that single on ...

  8. UML之状态机图

    状态机图 基本概念: 状态机图,UML 1.x规范中称状态图,是一个展示状态机的图. 状态机图基本上就是一个状态机中元素的投影,这也就意味着状态机图包括状态机的所有特征.状态机图显示了一个对象如何根据 ...

  9. ubuntu14.04 cpu-ssd

    1. ssd-caffe部署 五年半前老笔记本,没有GPU(其实有,AMD的,不能装CUDA),之前装过CPU版的Caffe 新建一个目录,然后参考网上步骤 sudo git clone https: ...

  10. Vector集合——单列集合的“祖宗”类

    是实现可增长的对象数组:所以底层也是数组: 与collection集合不同的是,vector是同步的,意味着是单线程的,意味着效率低,速度慢, 所以在jdk1.2版本之后被ArrayList集合所取代 ...