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


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

    灭霸神奇表情包

    第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题:关注题,最近在公号更新一个神奇的系列入门文章

    用自学的经历告诉你,学编程就找梦想橡皮擦

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

  • 相关阅读:
    c# 集合的交集、并集、差集
    git版本控制
    jquery html动态添加的元素绑定事件详解
    Binding笔记
    动画
    MSSQL 索引
    TCP和UDP的优缺点及区别
    Fetch API 了解 及对比ajax、axois
    提供图片服务网站
    2017 jq 总结
  • 原文地址:https://www.cnblogs.com/happymeng/p/10909838.html
Copyright © 2020-2023  润新知