1,new方法:

  类每次实例化时都会创建一个新的对象,

class Textcls:
# cls 是指类本身,
def __new__(cls, *args, **kwargs): # 在 __init__ 前触发,
if not hasattr( cls,'inst' ): # 判断是否有 inst 的属性
cls.inst = super().__new__(cls) # 调用 __new__ 方法,为当前类创建空间
# 如果没有 创建属性给实例,此时 属性= c1 return cls.inst
# 如果有 返回 c1, 此时 c1 = c2 def __init__(self):
print('') c1 = Textcls()   # 第一次实例 c1,   
c2 = Textcls()   # 第二次实例 c1 给c2
print(id(c1), id(c2))
# 创建两个实例 ,内存地址一样,所以两个实例拿完相同,
# 目的为了文件打开保存是一一的,

  

2,  定制属性访问     (自醒) 反射

  hasattr( cls,'inst' )    判断类 cls 中有没有 inst 的属性   存在返回 真

  delattr ( cls,'inst' )  删除类 cls  中的 inst  属性

  gelattr ( cls,'inst' )  获取类 cls  中的 inst  值,相当于:cls .inst

  selattr ( cls,'inst','已经存在?' )  如果 inst  在类 cls 中已经存在,则会用 “已经存在?”这个值覆盖原 inst  的值 ,

                  如果不存在,则添加这个属性

  

  __getattr__():  的使用,

class Textcls:
def __getattr__(self, item):
print('你调用的属性不存在,') c = Textcls()
getattr(c,'a') ## ------》》》 你调用的属性不存在,

  如果一个不存在的属性被调用,则会触发 __getattr__(): 的方法

3,描述符

class MyAttribute:
def __get__(self, instance, owner):
print("get") def __set__(self, instance, value):
print('set') def __delete__(self, instance):
print("delete") def __del__(self):
print('del') class MyClass:
m = MyAttribute() # 用实例做属性
def __del__(self):
print('del MyClass') c = MyClass()
c.m # 调用属性,如果属性是个实例,会触发 __get__方法
# 一个实例调用另一个实例, c.m = 123 # 修改实例属性时,果属性是个实例, 会触发 __set__
del c.m # 修改实例属性时,会触发 __set__

  

4,装饰器

def f1(f):
print('f1')
def f2():
print('f2')
return f2 def f():
print('f') f1(f)() ## f1(f)() 相当于
# a = f()
# f1(a)

f1()  返回 f2,这时 f1() 可以做另一个函数的 装饰def f1(f):

    print('f1')
def f2():
print('f2')
return f2 @ f1    # 语法糖,如果后面是韩式,会直接调用这个函数,
def f():
print('f') f() # 运行该函数时,相当于把这个函数当成参数传进 f1() 中运行,
  
#  再把返回的 闭包加 () 运行,

  

  内置装饰器:

   @property

class Re():

    @property       #  调用该方法时不会传入  self
def test1(self):
print('a') def test2(self):
print('b') m = Re()
m.test1
m.test2()
@ classmethod
class Tacls():

    def f1(self):
print(self) @ classmethod # 会自动传入 类本身,
def f2(cls):
cls().f1()
print('方法 f2') m = Tacls()
m.f1()
m.f2()

  

@staticmethod 
class Re():

    @staticmethod       #  调用该方法时不会传入  self
def test1(self):
print('a') def test2(self):
print('b') m = Re()
m.test1(self=)

  

潭州课堂25班:Ph201805201 第十二课 new方法,定制属性访问,描述符与装饰器 (课堂笔记)的更多相关文章

  1. NeHe OpenGL教程 第三十二课:拾取游戏

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. Kali Linux Web 渗透测试— 第十二课-websploit

    Kali Linux Web 渗透测试— 第十二课-websploit 文/玄魂 目录 Kali Linux Web 渗透测试— 第十二课-websploit..................... ...

  3. NeHe OpenGL教程 第四十二课:多重视口

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  4. NeHe OpenGL教程 第二十二课:凹凸映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. NeHe OpenGL教程 第十二课:显示列表

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字

    python3.4学习笔记(二十二) python 在字符串里面插入指定分割符,将list中的字符转为数字在字符串里面插入指定分割符的方法,先把字符串变成list然后用join方法变成字符串str=' ...

  7. “全栈2019”Java第八十二章:嵌套接口能否访问外部类中的成员?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  8. 潭州课堂25班:Ph201805201 第十课 类的定义,属性和方法 (课堂笔记)

    类的定义 共同属性,特征,方法者,可分为一类,并以名命之 class Abc: # class 定义类, 后面接类名 ( 规则 首字母大写 ) cls_name = '这个类的名字是Abc' # 在类 ...

  9. 潭州课堂25班:Ph201805201 WEB 之 页面编写 第四课 登录注册 (课堂笔记)

    index.html 首页 <!DOCTYPE html> <html lang="en"> <head> <meta charset=& ...

随机推荐

  1. linux内核中链表代码分析---list.h头文件分析(一)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...

  2. Nginx软件优化【转】

    转自 Nginx软件优化 - 惨绿少年 - 博客园 Nginx软件优化 - 惨绿少年 - 博客园 https://www.cnblogs.com/clsn/p/8484559.html 1.1 Ngi ...

  3. [HTML]点击按钮,页面总是跳回顶端的解决方法(Clicking an button,always resets the view to top of page)

    1 前言 当网页页面较长或者表单较多时,右侧会出现滚动条,然而经常会出现点击底部的<button>按钮或者<a>超链接,会出现点击后,当前页面会回到顶端. 2 方案 例如样例代 ...

  4. [学习笔记]Java的public,protected,private,缺省的作用域

    0.引言 Java的访问指示符public,protected,private,缺省可以用来修饰类和方法. 1.作用域如下 具体如下: 作用域       当前类    同一package   子孙类 ...

  5. Day6-------------ext4文件系统

    1.cp /etc/passwd /sdb6 把/etc/passwd的内容写入 sdb6 写入过程:日志------------>刷到硬盘 2.ext4已经有点过时 xfs:可存海量数据 bt ...

  6. layui上传文件配合进度条

    首先看一下效果图: 修改layui的源文件upload.js 1.打开layui/modules/upload.js 2.搜索ajax 3.找到url: 4.添加以下代码: ,xhr:l.xhr(fu ...

  7. LeetCode(59):螺旋矩阵 II

    Medium! 题目描述: 给定一个正整数 n,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的正方形矩阵. 示例: 输入: 3 输出: [ [ 1, 2, 3 ], [ 8, 9, ...

  8. Java中强、软、弱、虚引用

    1.强引用(StrongReference) 强引用是使用最普遍的引用.如果一个对象具有强引用,那垃圾回收器绝不会回收它.当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使 ...

  9. Java集合(Collection)综述

    1.集合简介 数学定义:一般地,我们把研究对象统称为元素.把一些元素组成的总体叫做集合. java集合定义:集合就是一个放数据的容器,准确的说是放数据对象引用的容器. java中通用集合类存放于jav ...

  10. hdu5672 尺取

    因为没有初始化ans搞了一晚上 还是尺取,枚举所有l 然后寻找对应满足条件的r,这个串可以被后面所有的串包含,所以每个l 的贡献就是len-r+1 #include<bits/stdc++.h& ...