面向对象的初阶复习

几个面试题:

1.什么时候用面向对象?

处理比较复杂的多个角色之间的关系。

清晰度提高,可读性强:无论开发还是调用,都能明确分辨出每个角色拥有的方法和属性。

增强了代码的可扩展性。

通过继承,增加了复用性。

更加规范。

2.如何理解python中一切皆对象

所有的基础数据类型都是对象,

3.类型与类的关系

类和类型是同一个东西

4.创建一个类,创建一个对象

对象:类名(),实例化

双下new开一个空间,做初始化

类:类都是被type创建的

    判断某个类的type,得到的结果还是typ。一个类型的类型就是类型。那么这个类的元类是type。

用了指定的mateclass的,mateclass就是元类。

元类都用来创建类的,一般都是type创建的

 

1类

class 类名()面试题,52分钟

类是什么时候加载的?

只要运行就执行,在私有属性位置的语句必然执行!但是类名.属性是不执行的,因为必须要所有类里的代码都加载完的时候才会有类名对应的类,才可以引用。

类里有:

静态属性/动态属性。这些的东西的地址都存在类中,对象中存着的是一个对类的引用,不是这个被引用对象的地址,是存着这个被引用对象地址的一个变量的地址。

2对象

在对象中,有类空间指针还有一些只属于对象的属性。

3组合

一个类的对象是另外一个类对象的属性

表示的是xx有xx的关系,“人”有“武器”。

4继承

表示的xx是xx的关系,“人类”是“动物类”

单继承和多继承

    单继承:子类的对象调某个方法,如果子类有就调子类的,没有就父类们的,没有报错。子类有还想调父类的,用supper(),不用再传self的就行。

在任何类中调用的方法,都必须要分辨self是谁的方法。

     多继承:继承顺序。新式类(3里默认继承obj,广度优先遵循C3算法,mro()可查看继承顺序)/经典类(2里,不继承,深度优先,无mro())

父类和子类:为什么要继承,减少代码重复,节省代码

经典类和新式类

 

5抽象类和接口类

规范:子类中必须实现同名的方法,且都不能被实例化

python里有原生实现抽象类的方法,没有接口类的。

抽象类和接口类的区别:被单继承的是抽象类,被多继承的是接口类

 

6多态和鸭子类型

 

7.封装,私有

8@property

装饰器函数且内置函数,帮助把类中的类中方法伪装成属性。

修改就调用@方法名.setter的代码

删除就调用@方法名.deleter的方法,原来的property还在。

 

8类方法和静态方法

classmethod

使用类名调用,默认传类名作为第一个参数

不用对象空间的内容,而是只用类的内容(静态属性)/静态方法和类方法这三个都可以,别的都不行.

Staticmethod

一个类既不用类,也不要对象的内容,等同于一个函数,就将这个方法变为一个静态方法

使用原因:1,完全想用面向对象编程,所有函数都必须写到类里

2,某个功能确实是某个类的方法,但是也确实没有用到和这个类相关的资源

比如登录是某一个对象的动作,应该放在这个类里,别的类的无法调用,一般是先写功能,发现确实不用的时候,回头加装饰器

 

9,反射

从某个指定的命名空间内,用字符串数据类型的变量名来获取变量的值

类名反射静态属性和类方法 静态方法

对象反射 对象属性 方法

模块反射:模块中的方法

自己模块中的:

 

原因:变量名是字符串的版本:从文件里读的时候/交互拿:input,网络传输

 

10.内置方法

__名字__都不是被直接调用的

可能会被简介调用

__str__  str(obj),obj的类必须有__str__要求函数的返回值必须是str

__repr__ 打印对象的时候,执行__repr__,像__str__...有后者就先后者,

无的话关于__str__的调用都去变成__repr__

       对应的是repr(obj)和这两种%r用法

       是__str__的备胎,被使用__str__的返回值

所以说,__retr__的功能强大,对应的调用方式多

继承相关:子类中使用__str__,先找子类,再找父类的,没有就子类的__repr__,还无则父类的__repr__,一直没有就object的__str__

__call__ 对象加括号  用类写装饰器必须用

__new__在实例化的过程中,最先制定的方法,在__init__之前用来创造一个对象

__Len__ len(obj),obj的类必须有__len__要求函数的返回值必须是int

posted @ 2019-07-08 21:38  眼见高楼起  阅读(112)  评论(0编辑  收藏  举报