python基础易错题
1.以下代码输入什么:
class Person:
a = 1
def __init__(self):
pass
def getAge(self):
print(__name__)
p = Person()
p.getAge()
结果为:
__main__
2.为了让下面这段代码运行,需要增加哪些代码?
class A(object):
def __init__(self,a,b):
self.__a = a
self.__b = b
def myprint(self):
print('a=', self.__a, 'b=', self.__b) a1=A(10,20)
a1.myprint() a1(80)
答案为:
class A(object):
def __init__(self, a, b):
self.__a = a
self.__b = b
def myprint(self):
print('a=', self.__a, 'b=', self.__b)
def __call__(self, num):
print('call:', num + self.__a)
3.下面这段代码输入什么?
class B(object):
def fn(self):
print('B fn')
def __init__(self):
print("B INIT") class A(object):
def fn(self):
print('A fn') def __new__(cls,a):
print("NEW", a)
if a>10:
return super(A, cls).__new__(cls)
return B() def __init__(self,a):
print("INIT", a) a1 = A(5)
a1.fn()
a2=A(20)
a2.fn()
答案为:
NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn
4.添加代码,使以下程序运行,并返回指定结果
class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print('init')
def mydefault(self):
print('default') a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
返回结果:
default
default
default
答案为: 添加__getattr__()魔术方法
class A(object):
def __init__(self,a,b):
self.a1 = a
self.b1 = b
print('init')
def mydefault(self):
print('default')
def __getattr__(self,name):
return self.mydefault a1 = A(10,20)
a1.fn1()
a1.fn2()
a1.fn3()
扩展:
class A(object):
def __init__(self, a, b):
self.a1 = a
self.b1 = b
print('init') def mydefault(self, *args):
print('default:' + str(args[0])) def __getattr__(self, name):
print("other fn:", name)
return self.mydefault a1 = A(10, 20)
a1.fn1(33)
a1.fn2('hello')
a1.fn3(10)
输出为:
init
other fn: fn1
default:33
other fn: fn2
default:hello
other fn: fn3
default:10
5.一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了。
答案:增加__init__.py文件,并在文件中增加:
__all__ = ['mod1','mod3']
6.写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。
def mulby(num):
def gn(val):
return num * val return gn zw = mulby(7)
print(zw(9));
7.解析下面的代码慢在哪
def strtest1(num):
str='first'
for i in range(num):
str+="X"
return str
答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。
8.有如下的一段代码:
class A(object):
def show(self):
print 'base show' class B(A):
def show(self):
print 'derived show' obj = B()
obj.show()
如何调用类A的show方法了。
方法如下:
obj.__class__ = A
obj.show()
__class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。
python基础易错题的更多相关文章
- python基础易错总结
1.python安装配置环境变量 [右键计算机]------->[属性]------->[高级系统设置]------->[高级]------->[环境变量]--------&g ...
- 【笔试题】Java 易错题精选
笔试题 Java 易错题精选 1.写出下列程序的运行结果( )String 不变性Java 值传递 public class Test { public static void main(String ...
- python基础之逻辑题(3)
Python基础之逻辑题(3) 1.编写一个函数实现将IP地址转换成一个整数 2.求结果:---lambda 3.求a的结果 4.求下面nums的输出 5.求下面片段的输出 6.写出程序的结果:--- ...
- python基础之逻辑题(2)
python基础之逻辑题(2) 1.若k为整数,下列while循环执行的次数为? 2.请输出正确结果-----numbers? 3.求结果-----math? 4.求结果-----sum? 5.输 ...
- python基础之逻辑题(1)
python基础之逻辑题(1) 1.用一行代码实现数值交换? 2.求结果--fromkeys? 3.1,2,3,4,5能组成多少个互不相同且无重复的三位数? 4.有两个字符串列表a和b,每个字符串是逗 ...
- 面试题之第一部分(Python基础篇) 80题
第一部分(python基础篇)80题 为什么学习Python?==*== # 1. python应用于很多领域,比如后端,前端,爬虫,机器学习(人工智能)等方面,几乎能涵盖各个开发语言的领域,同时它相 ...
- Java五道输出易错题解析(避免小错误)
收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注意下就OK了. 1. 看不见的空格? 下面的输出会正常吗? package basic; public class Integ ...
- Java五道输出易错题解析(进来挑战下)
转自:http://blog.csdn.net/lanxuezaipiao/article/details/41985243 收集了几个易错的或好玩的Java输出题,分享给大家,以后在编程学习中稍微注 ...
- 杭电OJ2039——三角形(c++)(易错题:数据类型不确定)
三角形 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submis ...
随机推荐
- AMQP协议与RabbitMQ、MQ消息队列的应用场景
什么是AMQP? 在异步通讯中,消息不会立刻到达接收方,而是被存放到一个容器中,当满足一定的条件之后,消息会被容器发送给接收方,这个容器即消息队列,而完成这个功能需要双方和容器以及其中的各个组件遵守统 ...
- oracle RMAN使用
一步一步学RMAN 备份 RMAN连接上ORACLE,WINDOWS下在命令模式下 RMAN TARGET / 连接本地数据库用的是本地认证模式.RMAN连接数据库必须在dedicate模式下.因此在 ...
- vl_sift函数用法
I = vl_impattern('roofs1') ; image(I) ; %vl_sift函数的输入是一个单精度的灰度图像,灰度值区间归一化到[, ]. %因此图像 I 需要通过下面的函数转成相 ...
- matlab 画二维图与三维图
二维图 ezplot('sin(x)');%默认范围 ezplot('sin(x)',[-4 4]);%自己设定范围 三维图 ezmesh('x*x+y*y');%默认范围
- com.android.dx.command.Main with arguments
Error:Execution failed for task ':jingyeyun:transformClassesWithDexForDebug'.> com.android.build. ...
- fiddler常用操作
fiddler常用操作 标签(空格分隔): fiddler fidrdler抓取https请求: fiddler是一个很好的抓包工具,但是默认的是抓取HTTP的,对于pc的https的会提示网页不安全 ...
- Beef的使用
应用普遍转移到B/S架构,浏览器成为统一客户端程序 通过注入JS脚本,利用浏览器攻击其他网站 ruby编写 攻击手段 利用网站XSS漏洞实现攻击 诱使客户端访问含有hook的伪造站点 结合中间人攻击注 ...
- scrapy 使用代理ip
1.在settings文件中添加ip池 IPPOOL=['xxx.xx.xx.xx','xxx.xx.xxx.xx'] 2.在middleware文件中添加自己的代理ip类(首先需要导入ipPOOL, ...
- day26 面向对象的常用方法 和 元类的使用
1. 面向对象中的常用方法 ***** isinstance() # 判断某个对象是不是某个类的实例 # 判断stu对象是不是Student类的实例 是不是子类 issubclass() class ...
- sqlserver 死锁相关
参考 https://www.cnblogs.com/fuyuanming/p/5783421.html -- 查询死锁 select request_session_id spid, OBJECT_ ...