python3 开发面试题(面向对象)6.6
""" 封装、继承、多态 1. 谈谈你对面向对象的理解? 2. Python面向对象中的继承有什么特点? 3. 面向对象深度优先和广度优先是什么? 4. 面向对象中super的作用? 5. 列举面向对象中特殊成员(带双下划线的特殊方法,如:__new__、__init__、__call__等) 6. 静态方法和类方法区别? """
#谈谈你对面向对象的理解? #面向对象,首先我们要理解对象,什么是对象?对象是特征与技能的结合体。特征即变量,技能即函数,对象就是变量和函数的结合体,在python中既有面向对象编程,
也有面向过程编程,在所做项目中需要用到哪种更加便捷就用那种编程方式,学面向对象的人,正常最常听到的一句话就是“万物皆对象”,我们编程就是将现实中的事物,
抽象成程序中的对象,用特征和技能去表现出对象。 # Python面向对象中的继承有什么特点? # 减少代码重用,可以多继承,缺点就是把子类与父类强耦合到一起 # 面向对象深度优先和广度优先是什么? #深度优先主要体现在经典类在菱形继承的背景下,查找属性的方式 #广度优先主要体现在新式类在菱形继承的背景下,查找属性的方式, 经典类只在python2中,由于的python2不支持服务的倒计时,推荐用python3,python3中的所有类都是新式类。 # 面向对象中super的作用? super在子类派生出新的方法中重用父类的功能 注意:super()的返回值是一个特殊的随想,该对象专用用来调用父类的属性
class Person(object): def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return "呵呵" class Male(Person): def __init__(self, name, age): super().__init__(name, age)
# 列举面向对象中特殊成员(带双下划线的特殊方法,如:__new__、__init__、__call__等) # __new__ 可以调用其他类的构造方法或者直接返回别的对象来作为本类的实例。 # __init__ 负责将类的实例化 # __call__ 对象后面加括号,触发执行 # __str__ print打印一个对象时 __unicode__ # __repr__ 和__str__ # __doc__ 类的注释,改属性是无法继承的 # __getattr__ 在使用调用属性(方式.属性)不存在的时候触发 # __setattr__ 添加/修改属性会触发它的执行 #__delattr__ 删除属性的时候会触发 # __delete__ 采用del删除属性时,触发
# 静态方法和类方法区别? # 1. 静态方法: 相当于普通函数 staticmethod # 2. 类方法: 通过类调用,第一个参数默认是类本身 classmethod
面向过程和面向对象http://www.cnblogs.com/ManyQian/p/8797097.html
反射
通过字符串来操作类与对象的属性,这种操作称为反射
hasattr(obj,某种属性)
不知道有没有某种方法时,进行的判断
getattr(obj,某种属性,None)
查看某种属性,没有属性,可以设置为NONE,有就返回值
setattr(obj,某种属性,属性对应的值)
添加obj对象的某种属性,及其值
delattr(obj,某种属性,属性对应的值)
删除obj对象的某种属性,及其值