python面試題收集
阿新 • • 發佈:2019-02-21
常用 一個 初始化 創建 總結 true cls 類對象 控制
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是類實例的一個對象
python面試題收集