Python面试笔记三 1. 类继承 2. 方法对象 3. new和init 4. Python list和dict生成 5. 全局和局部变量 6. 交换两个变量的值 7. 默认方法 8. 包管理 9. 闭包

有如下的一段代码:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python对象

 

如何调用类A的show方法了,方法如下:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python对象

 

__class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。

 

2. 方法对象

问题:为了让下面这段代码运行,需要增加哪些代码?

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python实例化

 

答案:为了能让对象实例能被直接调用,需要实现__call__方法

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python实例化

 

3. new和init

下面这段代码输出什么?

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python实例化

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python实例化

 

使用__new__方法,可以决定返回那个对象,也就是创建对象之前,这个可以用于设计模式的单例、工厂模式。__init__是创建对象是调用的。

4. Python list和dict生成

下面这段代码输出什么?

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python list dict

 

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python list dict

5. 全局和局部变量

下面这段代码输出什么?

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python全局变量

 

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python全局变量

 

num不是个全局变量,所以每个函数都得到了自己的num拷贝,如果你想修改num,则必须用global关键字声明。比如下面这样:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python全局变量

6. 交换两个变量的值

一行代码交换两个变量值

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python数据交换

 

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python数据交换

7. 默认方法

如下的代码:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python反射

 

方法 fn1/fn2/fn3 都没有定义,添加代码,是没有定义的方法都调用mydefault函数,上面的代码应该输出

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python反射

 

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python反射

 

方法__getattr__只有当没有定义的方法调用时,才是调用他。当fn1方法传入参数时,我们可以给mydefault方法增加一个*args不定参数来兼容。

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python反射

8. 包管理

一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了。

答案:增加__init__.py文件,并在文件中增加:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包

python第三方模块

9. 闭包

写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

答案:

Python面试笔记三
1. 类继承
2. 方法对象
3. new和init
4. Python list和dict生成
5. 全局和局部变量
6. 交换两个变量的值
7. 默认方法
8. 包管理
9. 闭包