Python 部分知识点总结(七)

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

一、面向对象

  1. 语言的分类
    面向机器:抽象成机器指令,机器容易理解,代表是汇编语言
    面向过程:做一件事情,排出个步骤,第一步干什么,第二步干什么,如果出现情况A,做什么处理,如果出现了情况B,做什么处理
    问题规模小,可以步骤化,按部就班处理,代表是C语言
    面向对象OOP(Object Oriented Programming):随着计算机需要解决的问题的规模扩大,情况越来越复杂,需要很多人,很多部门协作,面向过程编程不太适合了,代表是C++、Java、Python等
  2. 面向对象:一种认识世界、分析世界的方法论,将万事万物抽象为类。
    类:抽象的概念,是万事万物的抽象,是一类事物的共同特征的集合,用计算机语言来描述类,就是属性和方法的集合。
    对象:是类的具象,是一个实体,对于我们每个人这个个体,都是抽象概念人类的不同的实体。
    举例:你吃鱼
    你,是对象;鱼,也是对象;吃就是动作
    你,是具体的人,是具体的对象,你属于人类,人类是个抽象的概念,是无数具体的个体的抽象
    鱼,也是具体的对象,就是你吃的这一条具体的鱼,这条鱼属于鱼类,是无数的鱼抽象出来的概念
    吃,是动作,也是操作,也是方法,这个吃是你的动作,也就是人类具有的方法
    哲学:一切皆对象
    对象是数据和操作的封装
    对象是独立的,但是对象之间可以相互作用
    目前OOP是最接近人类认知的编程方式
  3. 面向对象的三要素
    封装
    组装:将数据和操作组装到一起
    隐藏数据:对外只暴露一些接口,通过接口访问对象
    继承
    多复用,继承来的就不用自己写了
    多继承少修改,OCP(Open-closedPrinciple),使用继承来改变,来体现个性
    多态
    面向对象编程最灵活的地方,动态绑定
    人类就是封装;人类继承自动物类,孩子继承父母特征,分为单一继承、多继承;多态,继承自动物类的人类、猫类的操作“吃”不同
  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运维部落立场,如若转载,请注明出处:/97663

发表评论

登录后才能评论

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达直属  万达注册  万达娱乐  guoqibee.com  万达娱乐注册  测试  万达娱乐直属  万达主管QQ  华宇招商  万达娱乐招商