1、代码调试
class atom():
def __init__(self,x=0,y=0):
self.x = x
self.y = y
def __sub__(self,other):
self.x += other.x
self.y += other.y
return atom(self.x,self.y)
a = atom(x = 5,y = 10)
b = atom(x = 1,y = 2)
c = a - b
输出:6,12
解析:__sub__方法是个内建方法,就是自带的做差的方法,省略也存在,这个类重写成+了
附上魔方方法:
魔方方法
__new__:对象实例化调用的第一个函数
__init__ : 构造器,在生成对象时调用
__del__ : 析构器,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
__iter__:定义迭代器中元素的行为
2、代码调试
class People:
num = 0
@classmethod
def count(cls):
People.num += 1
def __init__(self):
self.count()
class Man(People):
pass
class Woman(People):
def __init__(self):
super(Woman,self).__init__()
self.num += 1
if __name__ == '__main__':
a1 = People()
b1, b2 = Man(),Man()
c1,c2,c3 = Woman(),Woman(),Woman()
print(People.num, Man.num, Woman.num)
print(a1.num, b1.num, b2.num, c1.num,c2.num,c3.num)
输出:6 6 6
6 6 6 5 6 7
解析:
1)、classmethod 是类成员方法,在定义时需要名为cls的类似于self的参数,类成员方法可以直接用类的具体对象调用。但cls参数是自动被绑定到类的
2)、a1、b1、c1 的num值对应的是全局的num值,c1、c2、c3 的num值是实例的对象值
3、假设给定行优先存储的二维数组a[3][6],则第十个元素为(B)
A.a[3][1] B.a[1][3] C.a[4][1] D.a[1][4]
解析:行优先存储,即3行6列
4、以下代码执行后,data_list的预期结果是()
data_list = [1,2,3,4,5]
for single_data in data_list:
data_list.remove(single_data)
A.None
B.[2,4]
C.[]
D.由于在循环中删除列表数据,程序会报异常退出
解析:for循环实际是循环的列表下标(索引),同时由于列表的可变性,每一次删除一个元素,列表的长度就会发生变化,元素的索引也会发生变化,所以最终的列表是[2.4]



