题目
以下程序的输出是( )class cls1(object):a=1def mt(self):return self.aclass cls2(cls1):def mt(self):return self.a+1class prt(object):def mt(self,obj):obj.a+=1obj=cls2()p=prt()p.mt(obj)print(obj.a)A 1B 2C 3D 4
以下程序的输出是( )
class cls1(object):
a=1
def mt(self):
return self.a
class cls2(cls1):
def mt(self):
return self.a+1
class prt(object):
def mt(self,obj):
obj.a+=1
obj=cls2()
p=prt()
p.mt(obj)
print(obj.a)
A 1
B 2
C 3
D 4
题目解答
答案
让我们一步一步解析这段代码。首先,我们有一个名为cls1的父类,这个类有一个属性a,其值为1,并且有一个方法mt(),这个方法返回self.a的值。
然后,我们有一个名为cls2的子类,这个类继承了父类cls1,同时重写了父类的mt()方法,新的mt()方法返回self.a+1的值。
接着,我们有一个名为prt的类,这个类有一个方法mt(),这个方法接受一个对象作为参数,然后将这个对象的a属性值加1。
然后,我们创建了一个cls2的实例对象,名为obj,这个对象的初始a属性值为1(继承自cls1)。
然后,我们创建了一个prt的实例对象,名为p,然后调用了这个对象的mt()方法,传入了obj作为参数。这时,obj的a属性值将加1,变为2。
最后,我们打印出了obj的a属性值。
所以,这段代码的输出是2,即选项B是正确答案。
解析
步骤 1:定义类cls1
类cls1定义了一个属性a,其值为1,并定义了一个方法mt(),该方法返回self.a的值。
步骤 2:定义类cls2
类cls2继承自类cls1,重写了父类的mt()方法,新的mt()方法返回self.a+1的值。
步骤 3:定义类prt
类prt定义了一个方法mt(),该方法接受一个对象作为参数,然后将这个对象的a属性值加1。
步骤 4:创建对象obj
创建了一个cls2的实例对象obj,这个对象的初始a属性值为1(继承自cls1)。
步骤 5:创建对象p
创建了一个prt的实例对象p。
步骤 6:调用方法p.mt(obj)
调用了对象p的mt()方法,传入了obj作为参数。这时,obj的a属性值将加1,变为2。
步骤 7:打印obj.a
打印出了obj的a属性值,即2。
类cls1定义了一个属性a,其值为1,并定义了一个方法mt(),该方法返回self.a的值。
步骤 2:定义类cls2
类cls2继承自类cls1,重写了父类的mt()方法,新的mt()方法返回self.a+1的值。
步骤 3:定义类prt
类prt定义了一个方法mt(),该方法接受一个对象作为参数,然后将这个对象的a属性值加1。
步骤 4:创建对象obj
创建了一个cls2的实例对象obj,这个对象的初始a属性值为1(继承自cls1)。
步骤 5:创建对象p
创建了一个prt的实例对象p。
步骤 6:调用方法p.mt(obj)
调用了对象p的mt()方法,传入了obj作为参数。这时,obj的a属性值将加1,变为2。
步骤 7:打印obj.a
打印出了obj的a属性值,即2。