zoukankan      html  css  js  c++  java
  • 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是类实例的一个对象
  • 相关阅读:
    cesium计算当前地图范围extent以及近似当前层级zoom
    Cesium专栏-雷达遮罩动态扫描(附源码下载)
    Cesium专栏-地形开挖2-任意多边形开挖(附源码下载)
    Cesium 限制相机进入地下
    Cesium专栏-terrain地形、3dtiles模型、gltf模型 高度采样
    GeoTools介绍、环境安装、读取shp文件并显示
    基于vue+leaflet+echart的足迹分享评论平台
    10个JavaScript调试技巧,帮你更好、更快地调试代码
    后台权限管理,看这篇就够了
    编程狮-在线工具
  • 原文地址:https://www.cnblogs.com/yejiang/p/10410020.html
Copyright © 2011-2022 走看看