社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

梦想橡皮擦 • 4 年前 • 468 次点击  
阅读 44

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/33455
 
468 次点击