cls

importlib 根据字符串导入模块

与世无争的帅哥 提交于 2020-04-02 21:56:29
应用: Django中间件,rest framework 组件的全局配置文件 import importlib path = "abc.def.foo" module_path,class_name = path.rsplit('.',maxsplit=1) # 根据字符串的形式导入模块 m = importlib.import_module(module_path) cls = getattr(m,class_name) # foo() obj = cls() obj.process_request()     来源: https://www.cnblogs.com/wt7018/p/11553354.html

Python中的单例模式

为君一笑 提交于 2020-04-02 06:24:59
在 Python 中,我们可以用多种方法来实现单例模式: 使用模块 使用 __new__ 使用装饰器(decorator) 使用元类(metaclass) # mysingleton.py class My_Singleton(object): def foo(self): pass my_singleton = My_Singleton() ##############调用 from mysingleton import my_singleton my_singleton.foo() 使用 __new__ 为了使类只能出现一个实例,我们可以使用 __new__ 来控制实例的创建过程 class Singleton(object): _instance = None def __new__(cls, *args, **kwargs): if not cls._instance: cls._instance = super(Singleton, cls).__new__(cls, *args, **kwargs) return cls._instance class MyClass(Singleton): c = 1 a=MyClass() b=MyClass() print(a==b) print(a is b) print(id(a),id(b)) """ True True

python之旅:元类metaclass

烈酒焚心 提交于 2020-04-02 05:53:08
廖老师元类:http://www.cnblogs.com/moyand/p/8868857.html 一 知识储备 exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为locals() #可以把exec命令的执行当成是一个函数的执行,会将执行期间产生的名字存放于局部名称空间中 g={ 'x':1, 'y':2 } l={} exec(''' global x,z x=100 z=200 m=300 ''',g,l) print(g) #{'x': 100, 'y': 2,'z':200,......} print(l) #{'m': 300} exec的使用 二 引子(类也是对象) class Foo: pass f1=Foo() #f1是通过Foo类实例化的对象 python中一切皆是对象,类本身也是一个对象,当使用关键字class的时候,python解释器在加载class的时候就会创建一个对象(这里的对象指的是类而非类的实例),因而我们可以将类当作一个对象去使用,同样满足第一类对象的概念,可以: 把类赋值给一个变量 把类作为函数参数进行传递 把类作为函数的返回值 在运行时动态地创建类 上例可以看出f1是由Foo这个类产生的对象,而Foo本身也是对象

python 名称修饰,描述符,@classmethod、@staticmethd、@propert

我是研究僧i 提交于 2020-03-27 23:14:35
名称修饰 java和C#等其他高级语言中都有private关键字来修饰一个属性或字段是私有的,但是python中并没有private,而是有个与它接近的概念旧式名称修饰。每当在一个属性前面加上__前缀,解释器就会立刻将其重命名: 直接访问会抛异常 利用dir函数查看内部属性 python内部会把__前缀的属性重命名为【_类名+属性名】;因此在python中如果一个属性不是共有的就约定使用双下划线__为前缀,它不会调用任何名称修饰的算法,只是说名这个属性是该类的私有属性。 幸运的是python中还有其他机制类构建类的私有和共有代码,即使用描述符和property这些POP设计的关键特性 什么是描述符 python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问。这些方法有 get (), set (), 和 delete ()。如果这些方法中的任何一个被定义在一个对象中,这个对象就是一个描述符 它是一个类,定义了另一个类的访问方式,即一个类可以将属性管理托管给另一个类 描述符协议 描述符类基于3个特殊方法,这3个方法组成了描述符协议 set (self,obj,type=none)设置属性时调用,也称为setter get (self,obj,value) 读取属性时调用,也称为getter delete (self,obj)

SQLAlchemy基本操作和常用技巧

瘦欲@ 提交于 2020-03-26 07:41:30
点击打开链接 Python的ORM框架SQLAlchemy基本操作和常用技巧,包含大量实例,非常好的一个学习SQLAlchemy的教程,需要的朋友可以参考下 python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。 MySQL InnoDB 使用,所以使用其他 数据库 的也不能完全照搬本文。 mysql [python] view plain copy apt-get install mysql-server apt-get install mysql-client apt-get install libmysqlclient15-dev [python] view plain copy apt-get install python-mysqldb python ez_setup.py [python] view plain copy easy_install MySQL-Python [python] view plain copy easy_install SQLAlchemy 操作系统,遇到问题就 Google 一下吧。我是在 Mac OS X 上开发的,途中也遇到些问题,不过当时没记下来…… 值得一提的是我用了 MySQL-Python 来连 MySQL,因为不支持异步调用,所以和 Tornado 不是很搭

python使用sqlalchemy连接mysql数据库

痴心易碎 提交于 2020-03-26 07:40:32
创建一个连接引擎 engine=create_engine( "mysql+pymysql://root:password@localhost:3306/test",echo= True) from sqlalchemy import func, or_, not_ user = User(name='a') session.add(user) user = User(name='b') session.add(user) user = User(name='a') session.add(user) user = User() session.add(user) session.commit() query = session.query(User) print query # 显示SQL 语句 print query.statement # 同上 for user in query: # 遍历时查询 print user.name print query.all() # 返回的是一个类似列表的对象 print query.first().name # 记录不存在时,first() 会返回 None # print query.one().name # 不存在,或有多行记录时会抛出异常 print query.filter(User.id == 2).first().name

python中名称修饰与描述符

孤者浪人 提交于 2020-03-25 21:05:23
名称修饰 java和C#等其他高级语言中都有private关键字来修饰一个属性或字段是私有的,但是python中并没有private,而是有个与它接近的概念旧式名称修饰。每当在一个属性前面加上__前缀,解释器就会立刻将其重命名: 直接访问会抛异常 利用dir函数查看内部属性 python内部会把__前缀的属性重命名为【_类名+属性名】;因此在python中如果一个属性不是共有的就约定使用双下划线__为前缀,它不会调用任何名称修饰的算法,只是说名这个属性是该类的私有属性。 幸运的是python中还有其他机制类构建类的私有和共有代码,即使用描述符和property这些POP设计的关键特性 什么是描述符 python描述符是一个“绑定行为”的对象属性,在描述符协议中,它可以通过方法重写属性的访问。这些方法有 __ get__(), __ set__(), 和__delete__()。如果这些方法中的任何一个被定义在一个对象中,这个对象就是一个描述符 它是一个类,定义了另一个类的访问方式,即一个类可以将属性管理托管给另一个类 描述符协议 描述符类基于3个特殊方法,这3个方法组成了描述符协议 __ set__(self,obj,type=none)设置属性时调用,也称为setter __ get__(self,obj,value) 读取属性时调用,也称为getter __ delete__

vector的多维版本

倖福魔咒の 提交于 2020-03-25 12:15:46
1.一行代码实现如下功能 #方式一 # if len(self) != len(other): # return False # for a, b in zip(self, other): # if a != b: # return False # return True #方式二 return len(self) == len(other) and all(a == b for a, b in zip(self, other)) 2.多维 import itertools import math from array import array import reprlib import numbers import operator import functools class Vector: typecode = 'd' shortcut_name = 'xyzt' def __init__(self, components): '''类外直接拿到属性''' self._components = array(self.typecode, components) def __iter__(self): '''返回可迭代的对象''' return iter(self._components) def __str__(self): return str(tuple(self))

Web开发---路由实现

一曲冷凌霜 提交于 2020-03-24 23:01:35
类Flask框架实现 路由route 路由功能实现 路由类实现 #路由 # url = 'http://127.0.0.1:9999/python/index.html?id=5&name=wayne&age=20' # path = '/python/index.html' class Router: ROUTETABLE = {} def register(self,path,handler): self.ROUTETABLE[path] = handler def indexhandler(request): return '<h1>欢迎来到index.html</h1>' def pythonhandler(request): return "<h1>欢迎来到python.html</h1>" router = Router() router.register('/',indexhandler) router.register('/python',pythonhandler) 404处理 注册函数的改造 将注册函数改造成装饰器 class Router: ROUTETABLE = {} @classmethod #注册路由,装饰器 def register(cls,path): def wrapper(handler): cls.ROUTETABLE[path] =

python(七):元类与抽象基类

你。 提交于 2020-03-24 19:06:44
一、实例创建   在创建实例时,调用__new__方法和__init__方法,这两个方法在没有定义时,是自动调用了object来实现的。python3默认创建的类是继承了object。 class A(object): def __init__(self, *args, **kwargs): self.name, self.age, self.gender = args[:3] def __new__(cls, *args, **kwargs): print("__new__ has called.") return super(A, cls).__new__(cls) # 可写为 super().__new__(cls) 或 object.__new__(cls) a = A("Li", 27, "male") print(a.name, a.age, a.gender) """ __new__ has called. Li 27 male """ 二、类的创建   以class关键字开头的上下文在定义时就已经被解释执行。而函数(包括匿名函数)在没被调用时是不执行的。这个过程本质上做了一件事情:从元类type那里创建了一个名为A的类,开辟类内存空间,并读取class语句的上下文,将类属性和方法写进去。 print("--解释器开始执行--") def func(): print(