python面向对象编程的一些问题

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() #通过调用实例来访问类属性

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值