1. 程式人生 > >python面試題收集

python面試題收集

常用 一個 初始化 創建 總結 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面試題收集