必须放一个表情包,太魔性了!

第1题: 修改以下Python代码,使得下面的代码调用类A的show方法?

原始代码


  1. class A(object):
  2. def run(self):
  3. print("基础 run 方法")
  4. class B(A):
  5. def run(self):
  6. print("衍生 run 方法 ")
  7. obj = B()
  8. obj.run()

面试要点:

类继承,只要通过__class__ 方法指定类对象就可以了。

修改代码

  1. class A(object):
  2. def run(self):
  3. print("基础 run 方法")
  4. class B(A):
  5. def run(self):
  6. print("衍生 run 方法 ")
  7. obj = B()
  8. obj.__class__ = A
  9. obj.run()

第2题:修改以下Python代码,使得代码能够运行

原始代码


  1. class A(object):
  2. def __init__(self,a,b):
  3. self.__a = a
  4. self.__b = b
  5. def show(self):
  6. print("a=",self.__a,"b=",self.__b)
  7. a = A(5,10)
  8. a.show()
  9. a(20)

面试要点:

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

修改代码

  1. class A(object):
  2. def __init__(self,a,b):
  3. self.__a = a
  4. self.__b = b
  5. def show(self):
  6. print("a=",self.__a,"b=",self.__b)
  7. def __call__(self, num):
  8. print("call:",num + self.__a)
  9. a = A(5,10)
  10. a.show()
  11. a(20)

第3题: 下面这段代码的输出是什么?

原始代码

  1. class B(object):
  2. def __init__(self):
  3. print("B init")
  4. def run(self):
  5. print("B run func")
  6. class A(object):
  7. def run(self):
  8. print("A run func")
  9. def __new__(cls, a):
  10. print("new",a)
  11. if a>10:
  12. return super(A,cls).__new__(cls)
  13. return B()
  14. def __init__(self,a):
  15. print("init",a)
  16. a1 = A(5)
  17. a1.run()
  18. a2 = A(20)

这个运行需要对代码比较熟悉了

结果如下

  1. # a1 = A(5)
  2. new 5
  3. B init
  4. # a1.run()
  5. new 5
  6. B init
  7. B run func
  8. # a2 = A(20)
  9. new 5
  10. B init
  11. B run func
  12. new 20
  13. init 20

第4题: 下面这段代码输出什么?

原始代码

  1. num = 9
  2. def fn1():
  3. num = 20
  4. def fn2():
  5. print(num)
  6. fn2() # 9
  7. fn1() # 啥都没有
  8. fn2() # 9

全局变量和局部变量。

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

第5题:如何添加代码,使得没有定义的方法都调用myfunc方法?

原始代码

  1. class A(object):
  2. def __init__(self,a,b):
  3. self.a1 = a
  4. self.b1 = b
  5. print("初始化方法")
  6. def myfunc(self):
  7. print("myfunc")
  8. a1 = A(10,20)
  9. a1.fn1()
  10. a1.fn2()
  11. a1.fn3()

修改代码

  1. class A(object):
  2. def __init__(self,a,b):
  3. self.a1 = a
  4. self.b1 = b
  5. print("初始化方法")
  6. def myfunc(self):
  7. print("myfunc")
  8. def __getattr__(self, item):
  9. return self.myfunc
  10. a1 = A(10,20)
  11. a1.fn1()
  12. a1.fn2()
  13. a1.fn3()

考点

python的默认方法, 只有当没有定义的方法调用时,才会调用方法 __getattr__

当 fn1 方法传入参数时,我们可以给 myfunc方法增加一个 *args 不定参数来兼容。

第6题:关注题,最近在公号更新一个神奇的系列入门文章

用自学的经历告诉你,学编程就找梦想橡皮擦

欢迎关注她的公众号,搜索--- 非本科程序员

这几道Python面试题,稳准狠,Python面试题No15的更多相关文章

  1. 『Python题库 - 简答题』 Python中的基本概念 (121道)

    ## 『Python题库 - 简答题』 Python中的基本概念 1. Python和Java.PHP.C.C#.C++等其他语言的对比? 2. 简述解释型和编译型编程语言? 3. 代码中要修改不可变 ...

  2. 面试题之第一部分(Python基础篇) 80题

    第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...

  3. Python学习【第一篇】Python简介

    Python简介 Python前世今生 Python是著名的“龟叔”Guido van Rossum在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言. 现在,全世界差不多有600多种编 ...

  4. C语言面试题大汇总之华为面试题 Eddy整理

    1.局部变量能否和全局变量重名? 答:能,局部会屏蔽全局.要用全局变量,需要使用"::" ;局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局 ...

  5. 【python全栈开发】初识python

    本人最开始接触python是在2013年接触,写过hello word!在此之前对开发类没有多大兴趣,不知道重要性,属于浑浑噩噩,忙忙乎乎,跌跌撞撞的.随后选择了Linux运维作为就业主攻方向. 经过 ...

  6. python 全栈开发,Day43(python全栈11期月考题)

    python全栈11期月考题 1.常用字符串格式化有哪些?并说明他们的区别 2.请手写一个单例模式(面试题) 3.利用 python 打印前一天的本地时间,格式为‘2018-01-30’(面试题) 4 ...

  7. Python学习系列(四)Python 入门语法规则2

    Python学习系列(四)Python 入门语法规则2 2017-4-3 09:18:04 编码和解码 Unicode.gbk,utf8之间的关系 2.对于py2.7, 如果utf8>gbk, ...

  8. 『Python基础』第2节: Python简介及入门

    一. Python介绍 Python是一门高级计算机程序设计语言,1989年,荷兰的Guido von Rossum创造了它.Guido是是一个牛人,1982年,他从阿姆斯特丹大学获得了数学和计算机硕 ...

  9. python的库有多少个?python有多少个模块?

    这里列举了大概500个左右的库: !   Chardet字符编码探测器,可以自动检测文本.网页.xml的编码. colorama主要用来给文本添加各种颜色,并且非常简单易用. Prettytable主 ...

随机推荐

  1. Java并发模型(一)

    学习资料来自http://ifeve.com/java-concurrency-thread-directory/ 一.多线程 进程和线程的区别: 一个程序运行至少一个进程,一个进程至少包含一个线程. ...

  2. YYYY-mm-dd HH:MM:SS 备忘录

    d 月中的某一天.一位数的日期没有前导零. dd 月中的某一天.一位数的日期有一个前导零. ddd 周中某天的缩写名称,在 AbbreviatedDayNames 中定义. dddd 周中某天的完整名 ...

  3. C#SocketAsyncEventArgs实现高效能多并发TCPSocket通信 (服务器实现)

    http://freshflower.iteye.com/blog/2285272 想着当初到处找不到相关资料来实现.net的Socket通信的痛苦与心酸, 于是将自己写的代码公布给大家, 让大家少走 ...

  4. Git_学习_02_ 分支

    Git鼓励大量使用分支: 1.查看分支:git branch 2.创建分支:git branch <name> 3.切换分支:git checkout <name> 4.创建+ ...

  5. swoole_table

    Memory Swoole提供了7个内存操作的模块,在多进程编程中可以帮助开发者实现一些特殊的需求. swoole_table 是基于共享内存和锁实现的超高性能,并发数据结构

  6. zero to one (2)

    kali虚拟机整理 关于kali的虚拟机,我搞崩过很多次,重新安装了很多次,也遇到了很多问题,有一些解决不了的就重新安装,费时费力,要善于用虚拟机. 关于网络配置的问题 关于网络配置,在这里我想主要记 ...

  7. P2051 [AHOI2009]中国象棋[线性DP]

    最近智商有点不在线.其实一直不在线. 题目 先是想用$f[i][j][k][0/1/2]$表示摆了i行时有j列空着,k列有了一个炮,且当下摆了0/1/2个的状态,转移方程写的出来但是极其繁琐.于是又设 ...

  8. 【LeetCode】017. Letter Combinations of a Phone Number

    题目: Given a digit string, return all possible letter combinations that the number could represent. A ...

  9. 使用Tornado作为Django App的服务器

    闲来无事,折腾折腾. 老是听说tonado是个异步web框架和服务器,作为框架倒是了解到了,但是服务器一直不太懂.所以决定了解一下,既然可以做服务器,那就把自己的django app部署到这上边去. ...

  10. CSS 浏览器兼容

    1.  兼容 IF <!--[if lte IE 7]> <style type="text/css"> .menu { position:relative ...