课前的解答

1.vim怎么退出都知道吧,配置了pep8,所以说会出现退出的时候error,再退出一次就ok q:退出

w:保存

wq 保存退出

q!:强制退出

shift + zz:保存退出

x:保存退出

2.推荐大家两款软件:向日葵(远程控制软件),网易有道词典,Python官方文档

3.函数名首字母不要大写,类名是要大写,这都是约定俗成的东西(规范) 函数跟类取名的时候

class Apple: # 苹果类 ​ pass

4.递归,首先第一点,我们用的不多,计算量大,慢.第二点,没有好好捋一遍(递归是有深度的)

5.不明白的时候先去自己按照代码执行顺序走一遍,不要去钻牛角尖。

6.我课上讲的时候,大家尽量的不要去跟着我敲,先把思路理清楚,先听明白了再讲其他的

7.我们现在学的基础,很多东西都是固定的,def,范式

1.new方法与单例模式

--new--()方法实现单例模式,只能实例化一个对象.重复实例的id是一样的.

实例化时候最先调用--new--()方法,然后执行--init--()方法.

class Earth(object): #python2中写object , 旧式类

def --new--(cls,*args,**kwargs): #cls代表类本身.

if not hasattr(cls,'instance'):

cls.instance = super().--new--(cls) #把父类的new方法继承到instance属性中

return cls.instance

def --init--(self): #self实例本身.

self.name = 'earth'

普通的类实例化一次就会开辟一个新的内存空间.

2.定制属性访问

python中一切皆对象.

查:

hasattr(re,'length') 返回bool值,判断有没有这个属性.

getattr(re.'length') 返回属性值

b.--getattribute--('length') #返回属性值

增:

b.aaa =1

setattr(b,'bbb',2)

b.--setattr--('ccc',3)

改:

setattr(b,'length',6)

b.--setattr--('length',5) 底层调用这个魔方方法.

删:

delattr(b,'ccc')

b.--delattr--('bbb') 底层调用这个魔方方法.

del b

def --getattr--(self,item):

print('no attribute') # 重写魔法方法,当属性不存在时,如果定义了此方法,则调用方法.改变报错为打印这句话.

3.描述符

如果在一个类中实例化另一个类,对这个属性进行访问的时候怎么做的?

class MyAttribute:

def --get--(self,instance,owner):

print('get')

def --set--(self,instance,value):

print('set')

def --delete--(self,instance):

print('del')

class MyClass:

m = MyAttribute() #在另一个类里面实例化了外面的类. m 就是描述符

def --del--(self):

print('instance delete')

c = MyClass()

c.m #打印出了MyAttribute的--get--()方法里面的内容.

c.m = 1 #打印出了MyAttribute的--set--()方法里面的内容.

del c.m #打印出了MyAttribute的--delete--()方法里面的内容.

在类里面定义另一个类,对这个实例做访问时,需要定义 --get-- --set-- --delete--方法.

4.装饰器

闭包:函数里面嵌套函数,返回内层函数的函数体.

装饰器的作用:给原有的函数添加新的功能.在不修改以前的代码的前提之下去添加.

def func1(func):

  def func2(y):

    print('func2 is running')

    return func(y) + 1

  return func2

def gun(m):

  print('gun is running')

  return m * m

@func1

def deco(m):

  print('deco is running')

  return m * m

print(deco(2))
在原有的基础上加了1

内置装饰器 @property #原本要加括号调用.就像访问属性一样

示例:

class Rectangle:

  def --init--(self,length,width):

    self.length = length

    self.width = width

  def area(self):

    areas = self.length * self.width

      return areas

a = Rectangle(3,4)

print(a.area()) 变为 print(a.area),加property变的直接可以调用,不加括号.像访问属性一样.

@staticmethod #静态方法,没法访问类里面的类属性跟类参数方法了,但是可以不加self.相当于变成函数的效果.

类里面定义一个方法:

def func(): .

  print(self.width)

@classmethod #类方法

def func1(cls):

  print(cls.name)

原本是 类名.name. 加了类方法直接用cls.name代替.

类也可以当作装饰器.但需要定义call方法

class TestClass:

  def --init--(self,func):

    self.func = func

  def --call--(self, *args , **kwargs):

    print('--正在添加功能--')

    return self.func()

@TestClass

def fun():

  print('正在运行程序')

func()

python基础知识10-描述器和装饰器的更多相关文章

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

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

  2. python基础知识---迭代器、生成器、装饰器

    一.迭代器 二.生成器 http://www.cnblogs.com/huxi/archive/2011/07/14/2106863.html def func(): #定义生成器,和普通函数的区别是 ...

  3. python基础语法7 闭包函数与装饰器

    闭包函数: 1.闭包函数必须在函数内部定义 2.闭包函数可以引用外层函数的名字 闭包函数是 函数嵌套.函数对象.名称空间与作用域 结合体. # 直接传参 def func(x): print(x) f ...

  4. Python 基础之面向对象之八步理解装饰器

    装饰器:在不改变原有代码的情况下,为该原函数扩展新功能特征:返回新函数,替换旧函数语法:@ 语法糖 1.装饰器原型 #例1: def kuozhan(func):    def newfunc():  ...

  5. Python基础之函数的闭包与装饰器的介绍

    1.闭包的概念: 如果在一个函数中,定义了另外一个函数,并且那个函数使用了外面函数的变量,并且外面那个函数返回了里面这个函数的引用,那么称为里面的这个函数为闭包. 2.话不多说,以demo示例: de ...

  6. 7th,Python基础4——迭代器、生成器、装饰器、Json&pickle数据序列化、软件目录结构规范

    1.列表生成式,迭代器&生成器 要求把列表[0,1,2,3,4,5,6,7,8,9]里面的每个值都加1,如何实现? 匿名函数实现: a = map(lambda x:x+1, a) for i ...

  7. Python基础4 迭代器,生成器,装饰器,Json和pickle 数据序列化

    本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 1.列表生成式,迭代器&生成器 列表生成式 孩子,我现在有个需 ...

  8. python基础之迭代器、生成器、装饰器

    一.列表生成式 a = [0,1,2,3,4,5,6,7,8,9] b = [] for i in a: b.append(i+1) print(b) a = b print(a) --------- ...

  9. python基础之:九步认识装饰器

    step1. 先看个代码吧: def f(): ') f=lambda a:a +100 #覆盖上面的函数f print(f) #函数名指函数所在内存中的位置,入带后面括号表示执行函数 print(f ...

  10. python基础-第五篇-5.3装饰器

    小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白 ...

随机推荐

  1. Hexo瞎折腾系列(2) - 添加背景图片轮播

    动态背景图片插件jquery-backstretch jquery-backstretch是一款简单的jQuery插件,可以用来设置动态的背景图片,以下是官方网站的介绍. A simple jQuer ...

  2. ie下,php HTTP_REFERER获取失败的整理

    HTTP_REFERER有效的情况1.以iframe 形式调用地址2.以window.open调用,打开新页面window.open(url);3.使用window.location.replace在 ...

  3. SAE上无法加载css等文件

    如果你的SAE用到了这些文件,你会发现本地虽然能够运行成功,但是SAE上却无法加载. 其实就是地址发生了变化,我们告诉SAE这些东西怎么找就可以了. 例如我的css和js文件放在了app/static ...

  4. Dima and Magic Guitar CodeForces - 366E

    Dima and Magic Guitar CodeForces - 366E 题意: http://blog.csdn.net/u011026968/article/details/38716425 ...

  5. C语言精确微秒级的延时

    //----------------------------------------------------------------------------- // Delay_us //------ ...

  6. wamp无法进入phpMyAdmin或localhost的解决方法

    我用的是最新版的wampsever5,在win7(64位)下安装正常使用,没有无法进入phpMyAdmin的问题,但是我在虚拟机安装了win8(64位专业版),测试在win8下面的使用情况时,就有问题 ...

  7. 代码文件导到word里

    # 创建并写入word文档 import docx import sys import os dir = "D:\\gitwork\\fm.qimeng.c-class\\src\\main ...

  8. AJPFX关于Swing组件的总结

    默认布局管理器是流式布局(FlowLayout) 按钮的建立: jb1=new JButton("香蕉") 面板的建立:jp1=new JPanel(); 设置JFrame的标题: ...

  9. 【学习笔记】深入理解js原型和闭包(17)——补this

    本文对<深入理解js原型和闭包(10)——this>一篇进行补充,原文链接:https://www.cnblogs.com/lauzhishuai/p/10078307.html 原文中, ...

  10. FPGA内部RAM的初始化

    Altera的RAM初始化文件格式是mif和hex. QuartusII自带的RAM初始化工具很方便产生初始化文件. Xilinx的RAM初始化文件格式是coe, 在vivado中软件会将coe文件变 ...