一、面向对象
-
语言的分类面向机器:抽象成机器指令,机器容易理解,代表是 汇编语言面向过程:做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况 A,做什么处理,如果出现了情况 B,做什么处理问题规模小,可以步骤化,按部就班处理,代表是 C语言面向对象OOP(Object Oriented Programming):随着计算机需要解决的问题的规模扩大,情况越来越复杂,需要很多人,很多部门协作,面向过程编程不太适合了,代表是 C++、Java、Python等
-
面向对象:一种认识世界、分析世界的方法论,将万事万物抽象为类。类:抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合,用计算机语言来描述类,就是属性和方法的集合。对象:是类的具象,是一个实体,对于我们每个人这个个体,都是抽象概念人类的不同的实体。举例:你吃鱼你,是对象;鱼,也是对象;吃就是动作你,是具体的人,是具体的对象,你属于人类,人类是个抽象的概念,是无数具体的个体的抽象鱼,也是具体的对象,就是你吃的这一条具体的鱼,这条鱼属于鱼类,是无数的鱼抽象出来的概念吃,是动作,也是操作,也是方法,这个吃是你的动作,也就是人类具有的方法哲学:一切皆对象对象是数据和操作的封装对象是独立的,但是对象之间可以相互作用目前 OOP 是最接近人类认知的编程方式
-
面向对象的三要素封装组装:将数据和操作组装到一起隐藏数据:对外只暴露一些接口,通过接口访问对象继承多复用,继承来的就不用自己写了多继承少修改,OCP(Open-closed Principle),使用继承来改变,来体现个性多态面向对象编程最灵活的地方,动态绑定人类就是封装;人类继承自动物类,孩子继承父母特征,分为单一继承、多继承;多态,继承自动物类的人类、猫类的操作“吃”不同
-
Python 类的定义:必须使用 class 关键字;类名必须是用大驼峰命名;类定义完成后,就产生了一个类对象,绑定到了标识符 ClassName 上
-
Python 类实例化后,会自动调用 __init__ 方法,这个方法第一个参数必须留给 self,其他参数随意,作用就是对实例进行初始化,注意 __init__( ) 方法不能有返回值,也就说只能是 None类实例化后一定会获得一个对象,就是实例对象,__init__ 方法的第一个参数 self 就是指代某一个实例,表示创建的类实例本身,因此,在 __init__ 方法内部,就可以把各种属性绑定到 self在类中定义函数只有一点不同,就是第一参数永远是类的本身实例变量 self,并且调用时,不用传递该参数
-
实例变量是每一个实例自己的变量,是自己独有的;类变量是类的变量,是类的所有实例共享的属性和方法__name__ 对象名__class__ 对象的类型__dict__ 对象的属性的字典__qualname__ 类的限定名总结:类变量是属于类的变量,这个类的所有实例可以共享这个变量实例变量只能通过实例访问,通过类访问不到类变量使用全大写来命名
-
类装饰器def add_name(name):def wrapper(cls):cls.NAME = namereturn clsreturn wrapper@add_name(‘Tom’)class Person:AGE = 3print(Person.NAME)
-
类方法在类定义中,使用 @classmethod 装饰器修饰的方法必须至少有一个参数,且第一个参数留给了 cls,cls 指代调用者即类对象自身cls 这个标识符可以是任意合法名称,但是为了易读,请不要修改通过 cls 可以直接操作类的属性静态方法在类定义中,使用 @staticmethod 装饰器修饰的方法调用时,不会隐式的传入参数静态方法只是表明这个方法属于这个名词空间,函数归在一起,方便组织管理总结:类除了普通方法都可以调用,普通方法需要对象的实例作为第一参数实例可以调用所有类中定义的方法(包括类方法、静态方法),普通方法传入实例自身,静态方法和类方法需要找到实例的类
-
访问控制私有属性:使用双下划线开头的属性名私有变量的本质:如果声明了一个实例变量的时候,使用双下划线,Python 解释器会将其改名,转换名称为 _类名__变量名 的名称,所以用原来的名字访问不到了保护变量:在变量名前使用一个下划线,Python 解释器不会做任何改变,和普通属性一样,这只是开发者共同的约定,看见这种变量,就如同私有变量,不要直接使用私有方法:参照私有变量、保护变量,使用单双划线、单下划线命名方法私有方法的本质:单下划线的方法只是开发者之间的约定,解释器不做任何改变双下划线的方法,是私有方法,解释器会改名,改名策略和私有变量相同,_类名__方法名方法变量都在类的 __dict__ 中可以看到
-
属性装饰器:把实例的属性保护起来,不让外部直接访问,外部使用 getter 读取属性和 setter 设置属性property 装饰器:后面跟的函数名就是以后的属性名,它就是 getter,这个必须有,有了它至少是只读属性setter 装饰器:与属性名同名,且接收 2 个参数,第一个是 self,第二个是将要赋值的值,有了它,属性可写deleter 装饰器:可以控制是否删除属性,很少用property 装饰器必须在前,setter、deleter 装饰器在后,class Person:def __init__(self,name,age=18):self.name = nameself.__age = age@propertydef age(self):return self.__age@age.setterdef age(self,age):self.__age = age@age.deleterdef age(self):# del self.__ageprint(‘del’)tom = Person(‘Tom’)print(tom.age)tom.age = 20print(tom.age)del tom.age第二种方法是先定义三个函数,再加上一句 age = property(getage,setage,delage,’age property’),最后一个字段是 文档 的意思第三种方法是 age = property(lambda self:self.__age),这个只能起到只读的作用,不能写入
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97663