python基礎易錯題

來源:互聯網
上載者:User

標籤:類對象   return   整數   init   __name__   rom   derived   print   super   

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 5B INITB fnNEW 20INIT 20A 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()

返回結果:

defaultdefaultdefault

答案為: 添加__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.mydefaulta1 = A(10, 20)a1.fn1(33)a1.fn2(‘hello‘)a1.fn3(10)

輸出為:

initother fn: fn1default:33other fn: fn2default:helloother fn: fn3default: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__ = Aobj.show() 

__class__方法指向了類對象,只用給他賦實值型別A,然後調用方法show,但是用完了記得修改回來。

python基礎易錯題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.