• python基础易错题


    1.以下代码输入什么:

    class Person:
        a = 1
        def __init__(self):
            pass
        def getAge(self):
            print(__name__)
    p = Person()
    p.getAge()

    结果为:

    __main__

    2.为了让下面这段代码运行,需要增加哪些代码?

    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)

    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

    4.添加代码,使以下程序运行,并返回指定结果

    class A(object):
        def __init__(self,a,b):
            self.a1 = a
            self.b1 = b
            print('init')
        def mydefault(self):
            print('default')
     
    a1 = A(10,20)
    a1.fn1()
    a1.fn2()
    a1.fn3()

    返回结果:

    default
    default
    default

    答案为: 添加__getattr__()魔术方法

    class A(object):
        def __init__(self,a,b):
            self.a1 = a
            self.b1 = b
            print'init')
        def mydefault(self):
            print('default')
        def __getattr__(self,name):
            return self.mydefault
     
    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('init')
    
    
        def mydefault(self, *args):
            print('default:' + str(args[0]))
    
    
        def __getattr__(self, name):
            print("other fn:", name)
            return self.mydefault
    
    
    a1 = A(10, 20)
    a1.fn1(33)
    a1.fn2('hello')
    a1.fn3(10)

    输出为:

    init
    other fn: fn1
    default:33
    other fn: fn2
    default:hello
    other fn: fn3
    default:10

    5.一个包里有三个模块,mod1.py, mod2.py, mod3.py,但使用from demopack import *导入模块时,如何保证只有mod1、mod3被导入了。

    答案:增加__init__.py文件,并在文件中增加:

    __all__ = ['mod1','mod3']

    6.写一个函数,接收整数参数n,返回一个函数,函数的功能是把函数的参数和n相乘并把结果返回。

    def mulby(num):
        def gn(val):
            return num * val
     
        return gn
     
     
    zw = mulby(7)
    print(zw(9));

    7.解析下面的代码慢在哪

    def strtest1(num):
        str='first'
        for i in range(num):
            str+="X"
        return str
        

    答案:python的str是个不可变对象,每次迭代,都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。

    8.有如下的一段代码:

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

    如何调用类A的show方法了。
    方法如下:

    obj.__class__ = A
    obj.show() 

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

  • 相关阅读:
    富文本
    管理员状态
    分页
    tp。3.2中的模板基础
    get和post之间的区别
    RegExp
    获取各种类型的节点
    节点的层次关系
    创建元素节点
    JavaScript 正则
  • 原文地址:https://www.cnblogs.com/mswei/p/9356265.html
Copyright © 2020-2023  润新知