一、组合

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

#现在定义一个类,叫水池,水池里面有鱼和乌龟
class Turtle:
def __init__(self,x):
self.num = x class Fish:
def __init__(self,y):
self.num = y class Pool:
def __init__(self,x,y):
self.turtle = Turtle(x)
self.fish = Fish(y) def print_num(self):
print('共有%d只乌龟%d条鱼'%(self.turtle.num,self.fish.num)) >>> pool = Pool(1,10)
>>> pool.print_num()
共有1只乌龟10条鱼
>>>

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

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

三、类对象什么时候产生

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

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

属性会覆盖方法

>>> class C:
def x(self):
print('Xman') >>> c = C()
>>> c.x()
Xman
>>> c.x = 1
>>> c.x
1
>>> c.x()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
c.x()
TypeError: 'int' object is not callable

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

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

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

>>> class C:
count = 0
def __init__(self):
C.count +=1
def __del__(self):
C.count -=1 >>> a = C()
>>> b =C()
>>> c =C()
>>> C.count
3 >>> del a
>>> C.count
2 >>> del b,c
>>> C.count
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. 在window下搭建Vue.Js开发环境

    nodejs官网http://nodejs.cn/下载安装包,无特殊要求可本地傻瓜式安装,这里选择2017-5-2发布的 v6.10.3,也可选择阿里云镜像https://npm.taobao.org ...

  2. linux telnet命令

    telnet命令通常用来远程登录.telnet程序是基于TELNET协议的远程登录客户端程序.Telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式.它为用户 ...

  3. C#项目中关于多个程序集下App.config文件的问题

    在项目中我们会经常用到App.config文件,有的是自动生成的,比如引用webservice.wcf服务时生成:也有手动建立的配置文件直接默认名就为app.config.这些配置有的保存当前程序集用 ...

  4. opcode

    https://www.cnblogs.com/JohnABC/p/4531029.html

  5. 基于AOP注解实现业务功能的动态配置

    一.导入jar包 <dependency><!-- 4.引入AOP--> <groupId>org.springframework.boot</groupId ...

  6. 【转】查看sqlserver被锁的表以及如何解锁

    查看被锁表: select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName from sys. ...

  7. 线程&进程

    扯淡的yuan 并发&并行 并发:是指系统具有处理多个任务(动作)的能力. 并行:是指系统具有 同时 处理多个任务(动作)的能力. 同步&异步 同步:当进程执行到一个IO(等待外部数据 ...

  8. pandas.io.common.CParserError: Error tokenizing data. C error: Expected 1 fields in line 526, saw 5

    pandas.io.common.CParserError: Error tokenizing data. C error: Expected 1 fields in line 526, saw 5 ...

  9. 设计模式之Strategy(策略)(转)

    Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如, 公司经营业务变化图, 可能有两种实现方式,一个是线条曲 ...

  10. 设计模式之Observer(观察者)(转)

    Java深入到一定程度,就不可避免的碰到设计模式(design pattern)这一概念,了解设计模式,将使自己对java中的接口或抽象类应用有更深的理解.设计模式在java的中型系统中应用广泛,遵循 ...