自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

原创 使用装饰器扩充类的功能

想通过反省或者重写类定义的某部分来修改它的行为,但是你又不希望使用继承或元类的方式。def log_getattribute(cls): # Get the original implementation orig_getattribute = cls.__getattribute__ # Make a new definition def new_getatt...

2019-01-30 20:46:06 210

原创 装饰类方法和静态方法

装饰类方法或静态方法是很简单的,不过要确保装饰器在 @classmethod 或 @staticmethod 之前。import timefrom functools import wrapsdef timethis(func): @wraps(func) def wrapper(*args, **kwargs): start = time.time()...

2019-01-30 20:45:55 219

原创 装饰器为被包装函数增加参数

在装饰器中给被包装函数增加额外的参数,但是不能影响这个函数现有的调用规则。from functools import wrapsdef optional_debug(func): @wraps(func) def wrapper(*args, debug=False, **kwargs): if debug: print('Calli...

2019-01-22 13:24:07 577

原创 集成类装饰器

使用一个装饰器去包装函数,并返回一个可调用的实例。 装饰器还可以同时工作在类定义的内部和外部。将装饰器定义成一个实例,你需要确保它实现了 _call_() 和 _get_() 方法。import typesfrom functools import wrapsclass Profiled: def __init__(self, func): wraps(func...

2019-01-18 22:52:53 238 1

原创 实现类装饰器

在类中定义装饰器,并将其作用在其他函数或方法上。from functools import wrapsclass A: # Decorator as an instance method def decorator1(self, func): @wraps(func) def wrapper(*args, **kwargs): ...

2019-01-18 22:52:42 213

原创 使用装饰器对函数传参进行类型检查

from inspect import signaturefrom functools import wrapsdef typeassert(*ty_args, **ty_kwargs): """ :param ty_args: :param ty_kwargs: :return: """ def decorate(func): ..

2019-01-18 22:52:33 596

原创 带有可选参数的装饰器

有时候需要写一个装饰器,既可以不传参数给它,也可以传递可选参数给它。from functools import wraps, partialimport loggingdef logged(func=None, *, level=logging.DEBUG, name=None, message=None): if func is None: return par...

2019-01-18 22:52:22 390

原创 自定义带有属性的装饰器

需要写一个装饰器来包装一个函数,并且允许操作者提供参数在运行时控制装饰器行为。from functools import wraps, partialimport loggingdef attach_wrapper(obj, func=None): if func is None: return partial(attach_wrapper, obj) s...

2019-01-18 22:52:08 337

原创 撤销一个装饰器

一个装饰器已经作用在一个函数上,你想撤销它,直接访问原始的未包装的那个函数。假设装饰器是通过functools包中的wraps @wraps来实现的,那么可以通过访问 _wrapped_ 属性来访问原始函数:import timefrom functools import wrapsdef Time_D(func): ''' Decorator that reports t...

2019-01-15 21:27:12 207

原创 定义可以接受参数的装饰器

假设你想写一个装饰器,给函数添加日志功能,同时允许用户指定日志的级别和其他的选项。from functools import wrapsimport loggingdef logged(level, name=None, message=None): """ :param level: :param name: :param message: :r...

2019-01-15 21:26:51 309

原创 在函数上添加装饰器

想在已经存在的函数上添加一个装饰器,增加额外的操作处理(比如权限,日志、计时等)。例如:import timefrom functools import wrapsdef Count_Time(func): """ :param func: :return: """ @wraps(func) def wrapper(*args, **k...

2019-01-12 15:47:41 876

原创 类支持比较操作

让某个类的实例支持标准的比较运算(比如>=,!=,<=,<等),但是又不想去实现那一大丢的特殊方法。Python类对每个比较操作都需要实现一个特殊方法来支持。 例如为了支持>=操作符,你需要定义一个 、_ge_() 方法。 尽管定义一个方法没什么问题。装饰器 functools.total_ordering 就是用来简化这个处理的。 使用它来装饰一个来,你只需定义一个 ...

2019-01-11 23:40:16 168

原创 循环引用数据结构-使用弱引用

import weakrefclass Node: def __init__(self, value): self.value = value self._parent = None self.children = [] def __repr__(self): return 'Node({!r:})'.forma...

2019-01-11 23:39:45 252

原创 创建类的缓存实例

在创建一个类的对象时,如果之前使用同样参数创建过这个对象, 这时候不想在创建,而使用之前的实例缓存。你希望相同参数创建的对象是单例的。可以使用 logging 模块,使用相同的名称创建的 logger 实例永远只有一个。例1:import loggingone = logging.getLogger('foo')two = logging.getLogger('bar')one is ...

2019-01-11 23:39:23 343

原创 不用递归实现访问者模式

使用访问者模式遍历一个很深的嵌套树形数据结构,可能会因为超过嵌套层级限制而失败。 可以使用生成器可以在树遍历或搜索算法中消除递归。import typesclass Node(object): passclass NodeVisitor(object): def visit(self, node): stack = [node] las...

2019-01-11 18:00:29 211 1

原创 多种不同方法实现访问者模式

例1:class Node: passclass UnaryOperator(Node): def __init__(self, operand): self.operand = operandclass BinaryOperator(Node): def __init__(self, left, right): self.left...

2019-01-10 22:09:47 178

原创 通过字符串调用对象方法

使用 getattr() 函数。class Person(object): def __init__(self, name, age): self.name = name self.age = age def info(self): return {"name", self.name, "age",...

2019-01-10 22:09:19 902

原创 实现事物状态对象或者状态机制

想实现一个状态机制或者是在不同状态下执行操作的对象,但是又不想在代码中出现太多的条件判断语句。class Connection(object): """新方案——对每个状态定义一个类""" def __init__(self): self.new_state(ClosedConnectionState) def new_state(self, news...

2019-01-09 13:48:15 276

原创 使用Mixins扩展类功能

可以有很多的方法,来扩展其他类的功能。如果这些类并没有任何继承的关系。 因此你不能简单的将这些方法放入一个基类,然后被其他类继承。通常当你想自定义类的时候会碰上这些问题。可能是某个库提供了一些基础类, 你可以利用它们来构造你自己的类。可以使用扩展映射对象,给它们添加日志、唯一性设置、类型检查等等功能。from collections import defaultdict...

2019-01-09 13:39:10 333

原创 创建不需要调用__init__类实例

可以通过 _new_() 方法创建一个未初始化的实例。class Date(object): def __init__(self, year, month, day): self.year = year self.month = month self.day = dayif __name__ == "__main__": d ...

2019-01-08 13:43:24 552

原创 Python类中实现多个构造器

实现多个构造器,可以使用类方法import timeclass Date: """方法一:使用类方法""" # Primary constructor def __init__(self, year, month, day): self.year = year self.month = month self.day = ...

2019-01-08 13:34:41 5229

原创 Python类实现代理访问

加入想将某个实例的属性访问代理到内部另一个实例中去,目的可能是作为继承的一个替代方法或者实现代理模式,简单来说,代理是一种编程模式,它将某个操作转移给另外一个对象来实现。class A(object): def spam(self, x): print(x) pass def foo(self): passclass B(o...

2019-01-05 16:43:31 1685

原创 Python类-自定义容器

实现一个自定义的类来模拟内置的容器类功能,比如列表和字典。可以使用collections模块,定义了很多抽象基类,当你想自定义容器类的时候它们会非常有用。import collectionsimport bisectclass Sorted_Items(collections.Sequence): def __init__(self, initial=None): ...

2019-01-05 16:14:38 990

原创 Python-实现数据模型的类型约束

定义某些在属性赋值上面有限制的数据结构,对赋值时进行各种检查,这种情况最好的方法就是使用描述器。# Base class. Uses a descriptor to set a valueclass Descriptor: def __init__(self, name=None, **opts): self.name = name for key, v...

2019-01-05 13:27:08 1916 2

原创 使用Python类 - 定义接口或者抽象基类

想定义一个接口或抽象类,并且通过执行类型检查来确保子类实现了某些特定的方法,可以使用 abc 模块可以很轻松的定义抽象基类。from abc import ABCMeta, abstractmethodclass IStream(metaclass=ABCMeta): @abstractmethod def read(self, maxbytes=-1): ...

2019-01-02 09:55:43 762

原创 Python类-简化模版

有时候写了很多仅仅用作数据结构的类,不想写太多烦人的_init_() 函数,可以在父类写一个公共的init方法。import mathclass Structure1: # Class variable that specifies expected fields _fields = [] def __init__(self, *args): if ...

2019-01-01 16:22:21 797

原创 Python类使用延迟计算属性

你想将一个只读属性定义成一个property,并且只在访问的时候才会计算结果。 但是一旦被访问后,你希望结果值被缓存起来,不用每次都去计算。定义一个延迟属性的一种高效方法是通过使用一个描述器类。class Delayproperty: def __init__(self, func): self.func = func def __get__(self, in...

2019-01-01 15:58:22 546

原创 Python类创建一个自定义数据类型

创建一个新的拥有一些额外功能的实例属性类型,比如类型检查。# Descriptor attribute for an integer type-checked attributeclass String(object): def __init__(self, name): self.name = name def __get__(self, instance,...

2019-01-01 15:36:29 18867

原创 Python子类中扩展父类property

在子类中,你想要扩展定义在父类中的property的功能。class Person: def __init__(self, name): self.name = name # Getter function @property def name(self): return self._name # Setter func...

2019-01-01 15:13:50 801

原创 Python调用父类方法-super

在子类中调用父类的某个已经被覆盖的方法,需要使用 super() 函数。class Parent(object): def spam(self): print('Parent.spam')class Child(Parent): def spam(self): print('Child.spam') super().s...

2019-01-01 14:51:23 7147

原创 Python类中自定义属性验证-创建可管理的属性

给某个实例attribute增加除访问与修改之外的其他处理逻辑,比如类型检查或合法性验证。自定义某个属性的一种简单方法是将它定义为一个property。class Name_Check(object): def __init__(self, first_name, last_name): self.first_name = first_name s...

2019-01-01 00:55:18 608

django-polls案例

作为Django的第一入门案例,是新手学习Django必备案例,以投票为主

2019-03-27

python正则表达式全部方法

一个描述全部python正则方法,正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表通常被用来检索、替换那些符合某个模式(规则)的文本。 许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

2017-09-24

基于django搭建的博客

Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的软件设计模式,即模型M,视图V和控制器C。Django 框架的核心组件有: 1. 用于创建模型的对象关系映射 2. 为最终用户设计的完美管理界面 3. 一流的 URL 设计 4. 设计者友好的模板语言 5. 缓存系统。 在Django中,控制器接受用户输入的部分由框架自行处理,所以 Django 里更关注的是模型(Model)、模板(Template)和视图(Views),称为 MTV模式。它们 各自的职责如下,Django 视图不处理用户输入,而仅仅决定要展现哪些数据给用户,而Django 模板 仅仅决定如何展现Django视图指定的数据。或者说, Django将MVC中的视图进一步分解为 Django视图 和 Django模板两个部分,分别决定 “展现哪些数据” 和 “如何展现”,使得Django的模板可以根据需要随时替换,而不仅仅限制于内置的模板。 至于MVC控制器部分,由Django框架的URLconf来实现。URLconf机制是使用正则表达式匹配URL,然后调用合适的Python函数。框架把控制层给封装了,无非与数据交互这层都是数据库表的读,写,删除,更新的操作

2017-09-13

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除