Python 部分知识点总结(七)

此篇博客只是记录第九周未掌握或不熟悉的知识点,用来加深印象。

一、面向对象

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

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/97663

(1)
上一篇 2018-05-06 21:37
下一篇 2018-05-06 22:09

相关推荐

  • Python 部分知识点总结(六)

    此篇博客只是记录第八周未掌握或不熟悉的知识点,用来加深印象。

    Python笔记 2018-05-02
  • python学习总结

    内建函数、函数、插入排序、树

    2018-04-15
  • 正则表达式

    正则表达式 分类 BRE:基本正则表达式,grep,sed,vi等软件支持,vim有扩展 ERE:扩展正则表达式,egrep,grep -E ,sed  r等 PCRE:几乎所有的高级语言都是PCRE的方言或则变种, 基本语法 元字符metacharater .  匹配除换行符外任意一个字符 [abc]字符集合,只能表示一个字符的位置,匹配所包含的任意一个字…

    Python笔记 2018-05-07
  • 面向对象之魔术方法

    特殊属性 属性 含义 __name__ 类、函数、方法的名称 __module__ 类定义所在的模块名 __class__ 对象或类所属的类 __bases__ 类的基类的元组,顺序为它们在基类列表中出现的顺序 __doc__ 类、函数的文档字符串,若没定义则为None __mro__ 类的mro,方法查找顺序 __dict__ 类或实例的属性,可写的字典 …

    2018-05-20
  • 高阶函数

    高阶函数
    柯里化
    装饰器、文档字符串
    functools 模块 inspect 模块

    2018-04-25
  • Python函数返回值、作用域以及树的概念

    Python函数返回值、作用域以及树的概念

    Python笔记 2018-04-15