1.面向对象三大特性,各有什么用处,说说你的理解。
  继承:解决代码重用问题
  多态:为了类在继承和派生的时候,保证使用家谱中任一类的实例的某一属性时可以正确调用。
  封装:明确区分内外,控制外部对隐藏属性的操作行为,隔离复杂度


2.类的属性和对象的属性有什么区别?
  类的属性分为数据属性和函数属性。
  类的数据属性时所有对象共享的,类的函数属性是绑定给对象用的,称为绑定到对象的方法。

  对象的属性可能来自类定义,即类属性。(类定义自身、类定义继承两种途径)
  对象的属性还可能是该对象实例定义的,即对象属性

3.面向过程编程与面向对象编程的区别与应用场景?
  面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么问题。
  优点:复杂问题流程化,进而简单化。缺点:可扩展性和可维护性差
  适用:一般用于那些功能一旦实现之后就很少需要改变的场景, 如果你只是写一些简单的脚本,去做一些一次性任务。

  面向对象编程是利用“类”和“对象”来创建各种模型来实现对真实世界的描述。与面向过程机械式的思维方式形成鲜明对比,面向对象更加注重对现实世界而非流程的模拟,是一种“上帝式”的思维方式。
  优点:更容易扩展和修改,更容易理解  缺点:编程复杂度高、可控性差
  适用:应用于需求经常变化的软件中,一般需求的变化都集中在用户层,互联网应用,企业内部软件,游戏等都是面向对象的程序设计大显身手的好地方。

4.类和对象在内存中是如何保存的。
  以字典的方式保存,代码在类定义阶段便会执行,因而会产生新的名称空间,用来存放类的变量名和函数名,可以通过__dict__查看。
  __dict__查出字典,key为属性名,value为属性值

5.什么是绑定到对象的方法、绑定到类的方法、解除绑定的函数、如何定义,如何调用,给谁用?有什么特性
  (1)绑定到对象的方法:在类中定义没有加装饰器修饰的方法。
        对象.bound_method()  自动将对象当做第一个参数传入
    (2)绑定到类的方法:在类中定义的装饰器@classmethod修饰的方法。
        类.bound_method()   自动将类当第一个参数传入
  (3)非绑定方法:在类中用@staticmethod装饰器装饰的方法。
        没有自动传值,不绑定类和对象,类和对象均可调用。

6.使用实例进行 获取、设置、删除 数据, 分别会触发类的什么私有方法。

# item系列就是为了把对象模拟成像字典一样,就可以像字典一样访问
class A(object):
    def __getitem__(self, item):
        return self.__dict__.get(item)

    def __setitem__(self, key, value):
        self.__dict__[key] = value

    def __delitem__(self, key):
        del self.__dict__[key]

a = A()

a['key'] = "val"
print(a.__dict__)   # {'key': 'val'}
b = a["key"]
print(b)           # val
del a["key"]
print(a.__dict__)   # {}
item系列方法解决

相关文章: