面向对象编程

  1. 对象:特征和技能的结合体,对于python来说,特征和技能对应属性和方法
  2. 面向对象编程:就是一堆对象再交互
  3. 类:一系列具有相同特征和技能的对象
  4. 对象的属性查找:对象本身--》类--》父类--》父类的父类--》object--》自定义的元类--》元类type
  5. 对象和类的名称空间是分开的
  6. 我们看到的数据类型list就是一个类,lis=[1,2,3,],lis就是一个实例化的对象
  7. 类的继承,继承父类的所有属性和方法
  8. 类的派生,在继承父类属性的基础上再添加新的属性
  9. 类的组合,把类或对象可以引用/当作函数的参数/当作函数的返回值/容器元素
  10. 菱形继承问题(父类最后继承一个祖宗类),对于新式类而言,广度优先,对于经典类,深度优先
  11. 多态:一种事物的多种形态,动物--》人/猫/狗,多态性:同一种调用方式,属于同一形态的东西都可以使用(了解)
  12. 类的封装:隐藏属性和方法,内部可以访问,但是外部不能访问
  13. 类的property属性:将方法转化成属性
  14. 类的绑定方,加上一个@calassmethod装饰器;对象的绑定方法,没有任何东西;非绑定方法,@staticmethod,就是一个普通的函数
  15. 反射:通过字符串获取对应的属性或方法
  16. __init__实例化自动调用,__call__是对象加()的时候使用
  17. 元类:元类()==类People,元类()()==类()==实例化对象,metaclass=Mymeta
class Mymeta(type):
	def __init__(self,class_name,class_bases,class_dict):
	
		super().__init__(class_name,class_bases,class_dict)
		
	def __call__(self,*args,**kwargs):  # self = People
	
		obj = self.__new__(self)  # 固定写法,造空对象
		self.__init__(obj,*args,**kwargs)  # 使用People的init实例化对象
		
		return obj  # People('nick')
		
class People(metaclass=Mymeta):
	def __init__(self,name):
		self.name = name
		
p = People('nick')
原文地址:https://www.cnblogs.com/bladecheng/p/11103173.html