• python面试题收集


    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是类实例的一个对象
  • 相关阅读:
    超级管理员登录后如果连续XX分钟没有操作再次操作需要重新登录
    linux下连接本地的navicate
    linux 日常中会用到的命令(持续更新)
    关于PHP的 PHP-FPM进程CPU 100%的一些原因分析和解决方案
    VMware Workstation 14 激活码
    破解phpstorm
    redis五种数据类型的使用场景
    关于Nginx负载均衡的6种策略
    PHP和PHP-FPM 配置文件优化
    redis配置文件详解
  • 原文地址:https://www.cnblogs.com/yejiang/p/10410020.html
Copyright © 2020-2023  润新知