原始代码python
class A(object): def run(self): print("基础 run 方法") class B(A): def run(self): print("衍生 run 方法 ") obj = B() obj.run()
面试要点:程序员
类继承,只要经过
__class__
方法指定类对象就能够了。面试
修改代码编程
class A(object): def run(self): print("基础 run 方法") class B(A): def run(self): print("衍生 run 方法 ") obj = B() obj.__class__ = A obj.run()
原始代码函数
class A(object): def __init__(self,a,b): self.__a = a self.__b = b def show(self): print("a=",self.__a,"b=",self.__b) a = A(5,10) a.show() a(20)
面试要点:code
是方法对象,为了能让对象实例能被直接调用,须要实现
__call__
方法对象
修改代码继承
class A(object): def __init__(self,a,b): self.__a = a self.__b = b def show(self): print("a=",self.__a,"b=",self.__b) def __call__(self, num): print("call:",num + self.__a) a = A(5,10) a.show() a(20)
原始代码get
class B(object): def __init__(self): print("B init") def run(self): print("B run func") class A(object): def run(self): print("A run func") 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.run() a2 = A(20)
这个运行须要对代码比较熟悉了it
结果以下
# a1 = A(5) new 5 B init # a1.run() new 5 B init B run func # a2 = A(20) new 5 B init B run func new 20 init 20
原始代码
num = 9 def fn1(): num = 20 def fn2(): print(num) fn2() # 9 fn1() # 啥都没有 fn2() # 9
全局变量和局部变量。
num 不是个全局变量,因此每一个函数都获得了本身的 num 拷贝,若是你想修改 num ,则必须用 global 关键字声明
原始代码
class A(object): def __init__(self,a,b): self.a1 = a self.b1 = b print("初始化方法") def myfunc(self): print("myfunc") 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("初始化方法") def myfunc(self): print("myfunc") def __getattr__(self, item): return self.myfunc a1 = A(10,20) a1.fn1() a1.fn2() a1.fn3()
考点
python的默认方法, 只有当没有定义的方法调用时,才会调用方法__getattr__
。
当 fn1 方法传入参数时,咱们能够给 myfunc方法增长一个 *args 不定参数来兼容。
用自学的经历告诉你,学编程就找梦想橡皮擦
欢迎关注她的公众号,搜索--- 非本科程序员