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__) # {}