(标答出处: 鱼C论坛)
《零基础入门学习Python》
测试题:
答 :python的继承机制很有用,但是容易把代码复杂化以及以来隐含继承。所以,在使用的时候,可以使用组合(组成)来代替继承,使用方法很简单,只需要在类的定义中把需要的类放进去实例化就行了。
答:根据实际场合决定,组合用于“有一个”的场景中,继承用于“是一个”的场景中。例如:
水池中有乌龟,鱼,青蛙,应该使用组合;因为乌龟,鱼,青蛙和水池不是同一种东西;
企鹅和鸟类应该用继承,因为企鹅是鸟类的一种。
答:如果对象的属性名和方法相同,属性会覆盖方法。 例如:
答:
类属性 :num、count
实例属性:x、y
答:因为python只有拥有实例才能调用方法,所以python会自动把bb作为第一个参数传入导致错误。 改正如下:
class BB :
def printBB(self):
print ("no zuo no die")
>>>bb = BB()
>>>bb.printBB()
no zuo no die
动动手:
class C :
count = 0
def __init__ (self) :
C.count += 1
def __del__(self) :
C.count -= 1
a = C()
b = C()
c = C()
print (C.count)
del a
print (C.count)
del b
print (C.count)
del c
print (C.count)
运行结果:
class Stack :
def __init__ (self,start=[]) :
self.stack = []
for x in start :
self.push(x)
def isEmpty(self) :
return not self.stack
def push(self , obj) :
self.stack.append(obj)
print ("当前加入的元素为:%s " %(obj) )
def pop(self) :
if not self.stack :
print ("警告:栈为空!")
else :
print ("当前删除的元素为:%s " %(self.stack.pop()))
def top(self) :
if not self.stack:
print ("警告:栈为空!")
else :
print ("当前栈顶元素为:%s " %(self.stack[-1]))
def bottom(self) :
if not self.stack:
print ("警告:栈为空!")
else :
print ("当前栈底元素为:%s " %(self.stack[0]))
a = Stack([1,2,3,4])
a.top() #显示当前栈顶元素
a.bottom() #显示当前栈底元素
a.push(5) #压入5数据到栈顶
a.top() #显示当前栈顶元素
a.bottom() #显示当前栈底元素
a.pop() #弹出一个数据
a.top() #显示栈顶元素
a.bottom() #显示当前栈底元素
运行结果: