首页 > 编程语言 > 详细

python面试题收集

时间:2019-02-21 01:02:22      阅读:186      评论:0      收藏:0      [点我收藏+]
1.请问如何修改以下Python代码,使得下面的代码调用类A的show方法?

class A(object)
  def show(self):
    print derived show
class B(A)
  def show(self):
    print derived show
obj=B()
obj.show()

答:类的继承__class__方法指向了类对象,只用给他赋值类型A,然后调用方法show,但是用完了记得修改回来。

obj = B()
obj.__class__ = A
obj.show()    
2.请问如何修改以下Python代码,使得代码能够运行?
class A(object):
    def __init__(self, a, b):
        self.__a = a
        self.__b = b
    def myprint(self):
        print(a=, self.__a, b=, self.__b)
a1=A(10,20)
a1.myprint()
a1=(80)

答:

class A(object):
    def __init__(self, a, b):
        self.__a = a
        self.__b = b
    def myprint(self):
        print(a=, self.__a, b=, self.__b)
    def __call__(self, num):
        print(call:, num + self.__a)
a1=A(10,20)
a1.myprint()
a1=(80)
总结:
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
只要某个类型中有__call__方法,,我们可以把这个类型的对象当作函数来使用。 我们把 Person 类变成一个可调用对象: class Person(object): def __init__(self, name, gender): self.name = name self.gender = gender def __call__(self, friend): print My name is %s... % self.name print My friend is %s... % friend 现在可以对 Person 实例直接调用: >>> p = Person(Bob, male) >>> p(Tim) My name is Bob... My friend is Tim...
3.下面代码输出什么?
class B(object):
    def fn(self):
        print B fn
    def __init__(self):
        print "B INIT"
class A(object):
    def fn(self):
        print A fn
    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.fn()
a2=A(20)
a2.fn()

 

答:

NEW 5
B INIT
B fn
NEW 20
INIT 20
A fn

new方法接受的参数虽然也是和init一样,但init是在类实例创建之后调用,而 new方法正是创建这个类实例的方法。
1.init 通常用于初始化一个新实例,控制这个初始化的过程,比如添加一些属性, 做一些额外的操作,发生在类实例被创建完以后。它是实例级别的方法。
2.new 通常用于控制生成一个新实例的过程。它是类级别的方法。
cls和self的区别:cls是类本身的一个对象,self是类实例的一个对象

python面试题收集

原文:https://www.cnblogs.com/yejiang/p/10410020.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!