面向对象

1.面向对象和面向过程区别?

面向过程是流程化思维,以过程驱动。面向对象是以点带面的思维,以一个个不同的点(对象),连接整个结果。因此如果代码需要修改,只需修改其中的一个点(对象/类),无需全部修改。

 

2.类与对象的关系?

类与对象的关系: 类是对事物的总结. 抽象的概念. 类⽤来描述对象. 对象是类的实例化的结果. 对象能执⾏哪些⽅法. 都由类来决定. 类中定义了什么. 对象就拥有什么

 

3.面向对象3大特征及其特点?

3大特征:继承,多态,封装

多态:当获得结果时,不需考虑一个变量或者方法的结果的类型。

 

4.类中一些名词的解释?

class 类名:
# ⽅法
  def __init__(self, 参数1, 参数2....):
  # 属性变量
    self.属性1 = 参数1
    self.属性2 = 参数2
  ....
  # ⽅法
  def method(self):
    pass

 

5.属性变量与方法的区别和内存区别?

属性变量分为实例变量(字段)和类变量(静态变量)。实例变量每一个均有唯一的内存地址,类变量共有一个内存地址,因此类变量的修改会被实例化保留。实例变量可覆盖类变量。

 

方法:1. 成员⽅法(实例⽅法);2. 静态⽅法;3. 类⽅法 (不限制参数)

6.类的属性?

实现用方法描述属性(参数限制,只能有1个self)

 

7.私有属性和方法?

在变量前加__表示私有。私有内容不会被继承

 

8.类与类的关系有哪些?

1. 依赖关系

类A可使用类B,但不限制只能使用使用类B。如多态特征
2. 关联关系

关联体现的是两个类之间语义级别的一种强依赖关系,比如我和我的朋友,这种关系比依赖更强、不存在依赖关系的偶然性、关系也不是临时性的,一般是长期性的,而且双方的关系一般是平等的。关联可以是单向、双向的。表现在代码层面,为被关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量
3. 组合关系

一荣皆荣,一损皆损。如人的五脏,人没了,5脏也没了,表现在代码层面的如在类A中生成类B的实例对象
4. 聚合关系

整体挂了,但是个体仍可存活。如电脑挂了,CPU,硬盘换到别的电脑还能用。表现在代码层面如类B实例一个对象,然后在类A中使用。即使类A挂了,类B的对象依然能调用到其他类
5. 继承关系
6. 实现关系

9.类名和对象是可hash,也就是说类名和对象可作为字典的key使用

10.一些常见的私有方法

1. 类名() 会⾃动执⾏__init__()
2. 对象() 会⾃动执⾏__call__()
3. 对象[key] 会⾃动执⾏__getitem__()
4. 对象[key] = value 会⾃动执⾏__setitem__()
5. del 对象[key] 会⾃动执⾏ __delitem__()
6. 对象+对象 会⾃动执⾏ __add__()
7. with 对象 as 变量 会⾃动执⾏__enter__ __exit__
8. 打印对象的时候 会⾃动执⾏ __str__
9. ⼲掉可哈希 __hash__ == None 对象就不可哈希了.

 

11.创建一个对象的过程

⾸先, 在执⾏类名()的时候. 系统会⾃动先执⾏__new__()来开辟内存. 此时新开辟出来的内
存区域是空的. 紧随其后, 系统⾃动调⽤__init__()来完成对象的初始化⼯作. 按照时间轴来算.
1. 加载类
2. 开辟内存(__new__)
3. 初始化(__init__)
4. 使⽤对象⼲xxxxxxxxx

 

12. isinstance, type, issubclass 区别?
issubclass(xx,yy) 判断xx是不是yy类型下的子类

type(obj):查看obj是由那个类创建的

 

13.什么叫反射?

通过字符串来动态访问模块中的功能 .

反射, 其实⼀共有4个函数:
1. hasattr(obj, str) 判断obj中是否包含str成员
2. getattr(obj,str) obj中获取str成员
3. setattr(obj, str, value) obj中的str成员设置成value. 注意. 这⾥的value可以是
, 也可以是函数或者⽅法
4. delattr(obj, str) obj中的str成员删除掉
注意, 以上操作都是在内存中进⾏的. 并不会影响你的源代码

 

posted @ 2018-11-23 14:01  Freedom_L  阅读(135)  评论(0编辑  收藏  举报