重庆网站策划,做网站要具备哪些,杭州企业网站开发,wordpress中文插件下载来源#xff1a;python学习专栏
第一题#xff0c;对象的类属性指向类对象class A():
def show(self):
print( A_show )
class B():
def show(self):
print( B_show )
obj B()
obj.show()
#这样我们能够正常调用
#那么我们能不能
#obj.show()
#我们想调用A中的show
我们看一下…来源python学习专栏
第一题对象的类属性指向类对象class A():
def show(self):
print( A_show )
class B():
def show(self):
print( B_show )
obj B()
obj.show()
#这样我们能够正常调用
#那么我们能不能
#obj.show()
#我们想调用A中的show
我们看一下obj.__class__ A
obj.show()
这样就可以直接调用了
第二题、方法对象__call__class People():
def __init__(self,length):
self.__length length
def hand(self):
print( 手有 {} 米 .format(self.__length))
aPeople(1)
a.hand() #这样我们是能够完美运行的
那么我们不小心 a(10) 这样了我希望他能够正常运行
这里我们需要用到一个对象方法__call__class People():
def __init__(self,length):
self.__length length
def hand(self):
print( 手有 {} 米 .format(self.__length))
def __call__(self, *args):
return self.hand()
aPeople(1)
a() #这时a() 会找到__call__ 然后运行返回的函数
第三题__new__ 和 __init__
1.init 通常用于初始化一个新实例控制这个初始化的过程比如添加一些属性 做一些额外的操作发生在类实例被创建完以后。它是实例级别的方法。
2 new 通常用于控制生成一个新实例的过程。它是类级别的方法。
__new__ 在__init__ 之前运行
3 new至少要有一个参数cls代表要实例化的类此参数在实例化时由Python解释器自动提供
4 new必须要有返回值返回实例化出来的实例这点在自己实现new时要特别注意可以return父类new出来的实例或者直接是object的new出来的实例
class A():
def func(self):
print( A_func )
def __init__(self):
print( A_init )
class B():
def func(self):
print( B_func )
def __new__(cls, a):
print( new ,a)
if a10:
return super(B,cls).__new__(cls)
return A()
def __init__(self,a):
print( B_init )
#想想输出结果
a A()
b B(5)
b.func()
b B(11)
b.func()
第四题 列表解析式
生成列表list1 [1,2,3,4]
#取出list1中大于二的值
list2 [i for i in list1 if i2]
print(list2)
生成字典dict1 {i: i*2 for i in list1 if i*2 4 }
print(dict1)dict2 {i: items str(i*2) for i in list1 if i*2 4 }
print(dict2)
第五题变量域num 666
def f1():
num 888
print(num)
def f2():
print(num)
print(num)
f1()
print(num)
f2()
# 666
#888
#666
#666
需要在函数中改变变量
我们需要使用global
这只是局部变量和全局变量的变量域
我们继续看一下函数嵌套的变量域def fun():
num 0
def fun1():
num 1
def fun2():
print(num)
fun2()
fun1()
fun()
#1
在函数嵌套中变量会逐级网上找变量
这样不会存在找不到变量的问题
在fun2()找不到会到fun1()中找
第六题默认方法python反射机制getattrclass A:
def __init__(self,a,b):
self.a a
self.b b
def func(self):
print( ab{} .format(self.aself.b))
a1 A(1,2)
a1.func()
#al.fun() 这样呢就该报错了
好吧我不想让它报错class A:
def __init__(self,a,b):
self.a a
self.b b
def func(self):
print( ab{} .format(self.aself.b))
def __getattr__(self,args):
return self.func #切记这里不能加 因为 func()()是不能执行的
a1 A(1,2)
a1.fun()
#3
__getattr__hasattr
这是python的反射机制getattr会接收参数
然后执行对应的还有hasattr大家可以自己深究
第七题包管理
当 一个包pack里有三个模块model model2, model3,
采用from pack import *
怎样只导入 model model2
添加 __init__.py文件在文件中加入__all__ [ model , model2 ]
就能实现了
第八题 函数闭包
#要求写一个函数接受一个整数参数N返回一个函数函数功能是把函数的参数和N相乘的结果返回def f1(N):
def f2(val):
return N*val
return f2
这题解释量比较大大家可以到我的另外一篇文章学习
点击链接就可以跳转
第十题装饰器
装饰器本质就是函数 功能是为其它的函数添加功能
原则是
1不改变修饰函数的源代码
2 不修改修饰函数的调用方式
装饰器高阶函数函数嵌套闭包
我想在不改变一个函数源码状态下测试运行时间import time
def timer(func):
def wapper(a,*args, **kwargs):
if a 1:
start time.time()
res func(*args, **kwargs)
end time.time()
print( 函数运行时间 ,end-start)
return res
else:
return 1
return wapper
#我们测试下面这个函数的时间
#只需要把上面的函数加一个写在函数上
#就可以实现了
a1
timer
def cal(a,l):
res 0
for i in l:
time.sleep(0.01)
resi
return res
res cal(range(20))
print(res)
运行一下你就知道装饰器的强大之处了
知道这些面试题并不代表你面试就能够顺利通过
我们还是需要在平时多记录知识
祝大家早日找到适合自己的工作
今天的十道题就到这里了