zoukankan      html  css  js  c++  java
  • 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,但是用完了记得修改回来。

  • 相关阅读:
    Delphi XE4 FireMonkey 开发 IOS APP 发布到 AppStore 最后一步.
    Native iOS Control Delphi XE4
    Delphi XE4 iAD Framework 支持.
    using IOS API with Delphi XE4
    GoF23种设计模式之行为型模式之命令模式
    Android青翼蝠王之ContentProvider
    Android白眉鹰王之BroadcastReceiver
    Android倚天剑之Notification之亮剑IOS
    Android紫衫龙王之Activity
    GoF23种设计模式之行为型模式之访问者模式
  • 原文地址:https://www.cnblogs.com/mswei/p/9356265.html
Copyright © 2011-2022 走看看