第三模块:面向对象&网络编程基础-第1章 面向对象-练习题(简答题)

# 1.面向对象三大特性,各有什么用处,说说你的理解
# 封装:封装在于明确区分内外,使得类实现者可以修改封装内的东西而不影响外部调用者的代码;而外部使用用者只知道一个接口(函数),只要接口(函数)名、参数不变,使用者的代码永远无需改变。这就提供一个良好的合作基础——或者说,只要接口这个基础约定不变,则代码改变不足为虑
# 继承:用已经有的类建立一个新的类,这样就重用了已经有的软件中的一部分设置大部分,大大节省了编程工作量,这就是常说的软件重用,不仅可以重用自己的类,也可以继承别人的,比如标准库,来定制新的数据类型,这样就是大大缩短了软件开发周期,对大型软件开发来说,意义重大.
# 多态:增加了程序的灵活性
# 增加了程序额可扩展性
# 2.类的属性和对象的属性有什么区别? 
# 类属性就是bai定义du类的时候直接定义的属性
# 对象属性是在__init()方法中定义的属性
# 3.面向过程编程与面向对象编程的区别与应用场景
# 面向过程:核心是过程二字,过程指的是解决问题的步骤,设计一条流水线,机械式的思维方式
# 应用场景:面向过程的程序设计思想一般用于那些功能一旦实现之后就很少需要改变的场景
# 面向对象:核心是对象二字,对象就是特征与技能的结合体
# 应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用
# 4.类和对象在内存中是如何保存的
# 类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份
# 5.什么是绑定到对象的方法、绑定到类的方法、解除绑定的函数、如何定义,如何调用,给谁用?有什么特性
# 什么是绑定到对象的方法:在类内定义的没有被任何装饰器修饰的
# 绑定到类的方法:在类内定义的被装饰器@classmethod修饰的方法
# 解除绑定的函数、如何定义:不与类或对象绑定
# 如何调用,给谁用:@staticmethod
# 有什么特性:不管是类还是对象来调用,都没有自动传值这么一说了,那就是普通函数
# 7.python中经典类和新式类的区别
# 1.只有在python2中才分新式类和经典类,python3中统一都是新式类
# 2.在python2中,没有显式的继承object类的类,以及该类的子类,都是经典类
# 3.在python2中,显式地声明继承object的类,以及该类的子类,都是新式类
# 4.在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类
# 9.示例1, 现有如下代码, 会输出什么
# class People(object):
#     __name = "luffy"
#     __age = 18
#
# p1 = People()
# print(p1.__name, p1.__age)
#被封装,找不到
# 10.示例2, 现有如下代码, 会输出什么:
# class People(object):
#
#    def __init__(self):
#        print("__init__")
#
#    def __new__(cls, *args, **kwargs):
#        print("__new__")
#        return object.__new__(cls, *args, **kwargs)
#
# People()
#
# __new__
# __init__
# 13.下面这段代码的输出结果将是什么?请解释。
# 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 继承自父类的类属性x,所以都一样,指向同一块内存地址
# 1 2 1 更改Child1,Child1的x指向了新的内存地址
# 3 2 3 更改Parent,Parent的x指向了新的内存地址
# 14.多重继承的执行顺序,请解答以下输出结果是什么?并解释。
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 A B D A
# 16.很多同学都是学会了面向对象的语法,却依然写不出面向对象的程序,原因是什么呢?
# 原因就是因为你还没掌握一门面向对象设计利器,即领域建模,
# 请解释下什么是领域建模,以及如何通过其设计面向对象的程序?
# http://www.cnblogs.com/alex3714/articles/5188179.html 此blog最后面有详解
# 概念:对领域内的概念类或现实世界中对象的可视化表示



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值