1. __new__方法的运行顺序
  2. 装饰器的概念的用法
  3. 三个内置装饰器
  4. 类中属性的访问过程

__new__方法

创建实例的方法

__new__方法是在类创建实例的时候自动调用的

实例是通过类里面的__new__方法创建出来的

先调用__new__方法创建实例,再调用 __init__方法初始化实例

__new__方法,后面括号里的cls代表的是类本身

必须有返回值 父类名.__new__(cls)

单例模式

创建多个实例的时候,每个实例所指向的内存地址不同

单例模式让多个实例引用的是同一个实例,是一个实例的不同名字,指向同一内存地址

定制属性访问

就是对类里的属性进行增删改查的操作

实例名.属性名=值

setattr(实例名, '属性名', 值)        # 有这个属性就修改,没有就增加

实例名.__setattr__('属性名',值)       # 有这个属性就修改,没有就增加

只能删除自己添加的属性

delattr(实例名, '属性名')

实例名.__delattr__('属性名')

del 实例名

setattr(实例名, '属性名', 值)        # 有这个属性就修改,没有就增加

实例名.__setattr__('属性名',值)       # 有这个属性就修改,没有就增加

hasattr(实例名, '属性名')      返回bool值

getattr(实例名,  '属性名')      返回属性值,不存在则报错

实例名. __getattribute__('属性名')  返回属性值,不存在则报错

描述符

比较抽象的一个概念,了解即可

描述符协议:python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问

这些方法有 __get__(), __set__(), 和__delete__()

如果这些方法中的任何一个被定义在一个对象中,这个对象就是一个描述符

装饰器

本质是函数,能够实现在不修改原来的函数的基础上添加功能

在闭包的前提下进行装饰

三个内置装饰器

@property       # 就像和访问属性一样

@staticmethod     # 静态方法,与class类断开连接

@classmethod     # 类方法  cls代表类本身

类装饰器

类也可以做装饰器,但是需要定义 __call__ 方法

Python__new__方法、定制属性访问、描述符与装饰器的更多相关文章

  1. Python:高级主题之(属性取值和赋值过程、属性描述符、装饰器)

    Python:高级主题之(属性取值和赋值过程.属性描述符.装饰器) 背景 学习了Javascript才知道原来属性的取值和赋值操作访问的“位置”可能不同.还有词法作用域这个东西,这也是我学习任何一门语 ...

  2. 潭州课堂25班:Ph201805201 第十二课 new方法,定制属性访问,描述符与装饰器 (课堂笔记)

    1,new方法: 类每次实例化时都会创建一个新的对象, class Textcls: # cls 是指类本身, def __new__(cls, *args, **kwargs): # 在 __ini ...

  3. python基础学习之描述符和装饰器

    描述符的了解: 描述符协议: python描述符是一个"绑定行为"的对象属性,在描述符协议中,它可以通过方法重写属性的访问.这些方法有: __get__, __set__, 和__ ...

  4. ES6新增对象方法的访问描述符:get(只读)、set(只写)

    Es6新增对象方法的访问描述符:get(只读).set(只写),可以直接使用,一般用于数据监听,用途类似于vue.$watch. var obj = { a:1, get bar() { return ...

  5. Python笔记(4)类__属性与描述符

    部分参考自:http://www.geekfan.net/7862/ 新式类与经典类 2和3不一样,3都是新式类. 新式类和经典类的区别: class A: #classic class " ...

  6. ie8 报错:意外地调用了方法或属性访问

    在某场景中一句简单的js: $("#changeOption").text("增加"); 在 IE8 下面报错:'意外地调用了方法或属性访问' 改成:$(&qu ...

  7. 【python】闭包、@修饰符(装饰器)、

    闭包:(返回函数的行为叫闭包??) #函数也是对象,所以可以被传递 def line_conf(a,b): def line(x): return a*x+b return line line1=li ...

  8. Python 函数修饰符(装饰器)的使用

     Python 函数修饰符(装饰器)的使用 1.  修饰符的来源修饰符是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志.性能测试.事务处理等. 修饰符是解决这类问题的绝佳设计, ...

  9. 如何正确地使用Python的属性和描述符

    关于@property装饰器 在Python中我们使用@property装饰器来把对函数的调用伪装成对属性的访问. 那么为什么要这样做呢?因为@property让我们将自定义的代码同变量的访问/设定联 ...

随机推荐

  1. This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryAddUsageDescription key with a string value

    iOS10 11之后遇到这种报错的小伙伴们请注意啦: 你会发现网上一大堆博客和论坛都是让你在  Info.plist 里面要涉及隐私数据时要添加一句“提示语”.于是打开 Info.plist,点击 + ...

  2. Android Gradle 学习笔记(二):Gradle Wrapper

    Wrapper,就是对Gradle的一层包装,便于在团队开发过程中统一Gradle构建的版本.这样大家就可以使用统一的Gradle版本进行构建,避免因为Gradle的版本不统一带来的不必要的问题. 这 ...

  3. Django2.1.1与xadmin0.6.0遇到的坑(一)

    (1)django2.0把from django.core.urlresolvers修改成了django.urls 异常信息: ModuleNotFoundError: No module named ...

  4. Linux部署NFS服务共享文件

    NFS(网络文件系统)用于linux共享文件 第1步:配置所需要的环境 使用两台Linux主机 主机名称 操作系统 IP地址 NFS Centos7 192.168.218.139 NFSa Cent ...

  5. [apue] syslog 导致 accept 出错?

    前几天在看apue第16章关于socket的例子,就是一个非常典型的socket服务器,关键代码如下: void serve (int sockfd) { int ret; int clfd; int ...

  6. c/c++概述

    c/c++的学习分为两个部分 一.语言标准 语言标准定义了功能特性和标准库两部分. 功能特性由编译器负责具体实现,比如linux下gcc,windows下Visual Studio 标准库实现依赖于具 ...

  7. windows下配置ngnix服务器经常出现503问题解决办法

    自己网站在windows server2008下安装的ngnix,然后配置php,网站访问流量并不大,但是经常出现503问题.经过查看ngnix服务器错误日志,发现: (10061: No conne ...

  8. 【转】bootstrap table轻松实现数据表格

    在使用bootstrap table时可能在很多时候回用的表格来显示数据,如果自己写那肯定没问题,但是数据展示出来就麻烦多了,然而bootstrap table 封装了一套完善的数据表格组件,把从后台 ...

  9. Ant默认配置文件不是build.xml该如何编写命令进行编译打包

    Ant的构件文件是基于XML编写的,默认名称为build.xml. ant命令默认寻找build.xml文件.若文件名为hello.xml时,读者还需要对命令做少许改变, 改为:ant –f hell ...

  10. JS做的类似腾讯专题图片播放器,大家可以一起来改进!

    我是一个应届生,来公司不久,根据需求,网站需要一个专题图片轮播的页面.网上确实有很多现成的插件,但是,作为一个JS还不是很牛的应届生,我决定自己写一个! 话说忽然想到做个这个还真不容易,一时思绪理不清 ...