原始代码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)
复制代码
面试要点:spa
是方法对象,为了能让对象实例能被直接调用,须要实现
__call__
方法code
修改代码cdn
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)
复制代码
原始代码对象
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)
复制代码
这个运行须要对代码比较熟悉了继承
结果以下
# 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 不定参数来兼容。
用自学的经历告诉你,学编程就找梦想橡皮擦
欢迎关注她的公众号,搜索--- 非本科程序员