这几道Python面试题,稳准狠,Python面试题No15

好久不见. 提交于 2021-02-17 02:19:38

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

灭霸神奇表情包

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

原始代码


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()

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

原始代码


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)

面试要点:

是方法对象,为了能让对象实例能被直接调用,需要实现__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)

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

原始代码

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

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

原始代码

num  = 9
def fn1():
    num = 20

def fn2():
    print(num)

fn2() # 9
fn1() # 啥都没有
fn2() # 9

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

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

原始代码

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 不定参数来兼容。

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

她专科学历
27岁从零开始学习c,c++,python编程语言
29岁编写百例教程
30岁掌握10种编程语言,
用自学的经历告诉你,学编程就找梦想橡皮擦

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

序号 文章
Python面试题No1 Python基础面试,看这篇文章画重点吧
Python面试题No2 Python面试快问快答,理论要的就是速度与精准
Python面试题No3 学习Python一年,基础忘记了,看看面试题回忆回议
Python面试题No4 去面试Python工程师,这几个基础问题一定要能回答
Python面试题No5 2019年,Python工程师必考的6个面试题
Python面试题No6 昨天去面试,这5个Python面试题都被考到了
Python面试题No7 周三面试Python开发,这几道Python面试题差点答错,Python面试题No7
Python面试题No8 面试Python工程师,这几道编码题有必要背背
Python面试题No9 又面试了Python爬虫工程师,碰到这么几道面试题
Python面试题No10 朋友去面试Python工程师,又带回来几道基础题
Python面试题No11 刚毕业去面试Python工程师,这几道题太难了

本文分享 CSDN - 梦想橡皮擦。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!