1.现有如下代码,会输出什么?请写明原因
class People(object):
__name = ‘Luffy’;
__age = 18
p1 = People()
print(p1.__name,p1.__age)
会报错,因为 __name和 __age均为私有变量,只有内部可以访问,外部不能访问。
2.现有如下代码,会输出什么?请写明原因
class Parent(object):
x = 1
class Child1(Parent):
pass
class Child2(Parent):
pass
print(Parent.x,Child1.x,Child2.x)
Child1.x = 2
print(Parent.x,Child1.x,Child2.x)
Parent.x = 3
print(Parent.x,Child1.x,Child2.x)
会分别输出:
1 1 1
1 2 1
3 2 3
原因:
第一个print(Parent.x,Child1.x,Child2.x)输出1 1 1是因为Child1类和Child2类继承了People类的类属性x = 1,代码运行时会调用父类(People类)的x = 1;
第二个print(Parent.x,Child1.x,Child2.x)输出1 2 1 是因为Child2.x = 1(从父类继承而来),而Child1类在内部将类属性x = 1改成了x = 2,子类(Child1类)的x = 2覆盖了父类(People类)的x = 1,代码运行Child1.x时便会调用子类(Child1类)的x = 2;
第三个print(Parent.x,Child1.x,Child2.x)输出3 2 3是因为父类(People类)将类属性改成了x = 3,Child1.x=2已经是一个固定值,Child2.x继承了父类的值。
3.多重继承的执行顺序,请解答以下输出结果是什么?并解释
class A(object):
def __init__(self):
print(‘A’)
super(A,self).__init__()
class B(object):
def __init__(self):
print(‘B’)
super(B,self).__init__()
class C(A):
def __init__(self):
print(‘C’)
super(C,self).__init__()
class D(A):
def __init__(self):
print(‘D’)
super(D,self).__init__()
class E(B,C):
def __init__(self):
print(‘E’)
super(E,self).__init__()
class F(C,B,D):
def __init__(self):
print(‘F’)
super(F,self).__init__()
class G(D,B):
def __init__(self):
print(‘G’)
super(G,self).__init__()
if __name__ == ’__main__’
g = G()
f = F()
会输出:G-D-A-B-F-C-B-D-A
原因:首先是先生成一个G类的g对象,执行G内部函数,打印了G,先从G开始运行,第一个是G ,G中继承的父类是D和B,执行D类内部代码,打印了D,其中D中继承的父类是A,打印了A,因为广度优先,就先不去找最后的object类,而是返回找到G继承的B类执行B类内部代码,打印了B,最后的最后才会找到object类所以G-D-A-B,然后从F运行,第一个是F,F中继承的父类是C,B,D,广度优先,最后是
4.创建一个类People,拥有的方法为砍菜,娶媳妇,回家;实例化对象,执行相应的方法
显示如下:
李四,18岁,男,开车去娶媳妇
张三,22岁,男,上山去砍菜
王麻子,10岁,女,辍学回家
class People:
def __init__(self,name,age,gender):
self.name = name
self.age = age
self.gender = gender
def kanchai(self):
print('{},{}岁,{},上山去砍柴'.format(self.name,self.age,self.gender))
def quxifu(self):
print('{},{}岁,{},开车去娶媳妇'.format(self.name,self.age,self.gender))
def huijia(self):
print('{},{}岁,{},辍学回家'.format(self.name,self.age,self.gender))
lisi = People('李四',18,'男')
zhnagsan = People('张三',22,'男')
wangmazi = People('王麻子',10,'女')
lisi.quxifu()
zhnagsan.kanchai()
wangmazi.huijia()
5.封装一个学生类,有姓名,有年龄,有性别,有英语成绩,数学成绩,语文成绩。封装方法,求总分,平均分,以及打印学生的信息
class Student: # 定义一个学生类
def __init__(self,name,age,gender,English_s,Math_s,Chinese_s): #使用__init__方法绑定6个实例属性(姓名,年龄,性别,英语,数学,语文)
self.name = name
self.age = age
self.gender = gender
self.English_s = English_s
self.Math_s = Math_s
self.Chinese_s = Chinese_s
def sum_score(self): #计算总分方法
return (self.English_s + self.Math_s + self.Chinese_s)
def average_score(self): #计算平均分方法
return (self.English_s + self.Math_s + self.Chinese_s)/3
def personal_information(self): #打印个人信息方法
print(f'我的名字叫:{self.name},年龄:{self.age},性别:{self.gender}。\n'
f'英语成绩:{self.English_s},数学成绩:{self.Math_s},语文成绩:{self.Chinese_s}。\n'
f'总分是:{self.sum_score()},平均分是:{self.average_score():.2f}。') # \n换行
mo = Student('某某',18,'男',89,89,99) #创建一个实例 Jack
mo.personal_information() #通过调用实例来访问类属性