- 对象:特征和技能的结合体,对于python来说,特征和技能对应属性和方法
- 面向对象编程:就是一堆对象再交互
- 类:一系列具有相同特征和技能的对象
- 对象的属性查找:对象本身--》类--》父类--》父类的父类--》object--》自定义的元类--》元类type
- 对象和类的名称空间是分开的
- 我们看到的数据类型list就是一个类,lis=[1,2,3,],lis就是一个实例化的对象
- 类的继承,继承父类的所有属性和方法
- 类的派生,在继承父类属性的基础上再添加新的属性
- 类的组合,把类或对象可以引用/当作函数的参数/当作函数的返回值/容器元素
- 菱形继承问题(父类最后继承一个祖宗类),对于新式类而言,广度优先,对于经典类,深度优先
- 多态:一种事物的多种形态,动物--》人/猫/狗,多态性:同一种调用方式,属于同一形态的东西都可以使用(了解)
- 类的封装:隐藏属性和方法,内部可以访问,但是外部不能访问
- 类的property属性:将方法转化成属性
- 类的绑定方,加上一个@calassmethod装饰器;对象的绑定方法,没有任何东西;非绑定方法,@staticmethod,就是一个普通的函数
- 反射:通过字符串获取对应的属性或方法
- __init__实例化自动调用,__call__是对象加()的时候使用
- 元类:元类()==类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')