cls

python: 单例装饰器

给你一囗甜甜゛ 提交于 2020-03-24 18:43:56
3 月,跳不动了?>>> singleton 的三种写法 # # instance_map = {} # # # def get_instance(cls, *args, **kwargs): # if cls not in instance_map: # instance_map[cls] = cls(*args, **kwargs) # # log # instance = instance_map[cls] # print(f'id:{id(instance)}') # return instance # # # def singleton(cls): # def on_call(*args, **kwargs): # return get_instance(cls, *args, **kwargs) # return on_call def singleton(cls): instance = None def wrapper(*args, **kwargs): nonlocal instance if instance: return instance instance = cls(*args, **kwargs) print(f"id:{id(instance)}") return instance return wrapper class Singleton

Python装饰器学习(九步入门)

廉价感情. 提交于 2020-03-23 17:23:27
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖、多练习是好的学习方式。 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- coding:gbk -*- '''示例1: 最简单的函数,表示调用了两次''' def myfunc(): print ( "myfunc() called." ) myfunc() myfunc() 第二步:使用装饰函数在函数执行前和执行后分别附加额外功能 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 # -*- coding:gbk -*- '''示例2: 替换函数(装饰) 装饰函数的参数是被装饰的函数对象,返回原函数对象 装饰的实质语句: myfunc = deco(myfunc)''' def deco(func): print ( "before myfunc() called." ) func() print ( " after myfunc() called." ) return func def myfunc(): print ( " myfunc() called." ) myfunc = deco(myfunc) myfunc() myfunc() 第三步:使用语法糖@来装饰函数 1 2 3 4 5 6 7 8 9 10 11

Hibernate单向一对多对象关系模型映射

狂风中的少年 提交于 2020-03-23 12:57:58
1 hibernate 的对象关系映射 Orm: 类-----表 属性------字段 对象------记录 表:在数据库中存在主外键的关系,反向工厂类是由表生成,在由表生成类的时候,类和类之间存在者某个关系。将数据库的主外键关系,在java类型进行体现和维护(建立数据之间的关系和断开关系)。 2 单向的one-to-many 家庭和成员(家庭和成员之间的关系,是由家庭进行体现,成员不体现) 父亲和子女 班级和学生 …… 2.1 单向one-to-many数据库的模型 在数据库中两张表,产生主外键关系。 描述班级和学生的关系 2.2单向one-to-many java中的模型体现 通过java中的pojo进行表之间关系的体现。 在班级中定义班级下的学生的集合。 2.3单向one-to-many的配置 Classes.hbm.xml 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping package="org.guangsoft

iOS分类底层实现原理小记

廉价感情. 提交于 2020-03-23 02:30:38
摘要:iOS分类底层是怎么实现的?本文将分如下四个模块进行探究分类的结构体编译时的分类分类的加载总结本文使用的runtime源码版本是objc4-680文中类与分类代码如下//类@interfacePerson:NSObject@property(nonatomic,copy)NSString*presonName;@end@implementationPerson-(void)doSomeThing{NSLog(@"Person");}@end//分类@int iOS 分类底层是怎么实现的? 本文将分如下四个模块进行探究 分类的结构体 编译时的分类 分类的加载 总结 本文使用的runtime源码版本是 objc4 - 680 文中类与分类代码如下 //类 @interface Person : NSObject @property (nonatomic ,copy) NSString *presonName; @end @implementation Person - (void)doSomeThing{ NSLog(@"Person"); } @end // 分类 @interface Person(categoryPerson) @property (nonatomic ,copy) NSString *categoryPersonName; @end

Python之绑定方法与非绑定方法

烂漫一生 提交于 2020-03-21 05:48:47
类中定义的函数分成两大类 1、绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入) 1. 绑定到类的方法:用classmethod装饰器装饰的方法。 为类量身定制 类.boud_method(),自动将类当作第一个参数传入 (其实对象也可调用,但仍将类当作第一个参数传入) 2. 绑定到对象的方法:在类内部没有被任何装饰器装饰的方法。 为对象量身定制 对象.boud_method(),自动将对象当作第一个参数传入 (属于类的函数,类可以调用,但是必须按照函数的规则来,没有自动传值那么一说) 绑定给对象的方法(略) 绑定给类的方法(classmethod)   classmehtod是给类用的,即绑定到类,类在使用时会将类本身当做参数传给类方法的第一个参数(即便是对象来调用也会将类当作第一个参数传入),python为我们内置了函数classmethod来把类中的函数定义成类方法 class Foo(): def bar(self): print('bar') @classmethod # 把一个方法绑定给类:类.绑定到类的方法(),会把类本身当做第一个参数自动传递到类的方法里面 def test(cls,x): print(cls,x) # 拿到一个类的内存地址后,就可以实例化或者引用类的属性了 # # print(Foo.bar) # # print(Foo.test) f

__new__()方法的使用和实例化

人走茶凉 提交于 2020-03-18 17:49:36
Python中__new__()方法的使用和实例化 1 2 new ()是在新式类中新出现的方法,它作用在构造方法 init ()建造实例之前,可以这么理解,在Python 中存在于类里面的构造方法 init ()负责将类的实例化,而在 init ()调用之前, new ()决定是否要使用该 init ()方法,因为 new ()可以调用其他类的构造方法或者直接返回别的对象来作为本类 的实例。 如果将类比喻为工厂,那么 init ()方法则是该工厂的生产工人, init ()方法接受的初始化参 数则是生产所需原料, init ()方法会按照方法中的语句负责将原料加工成实例以供工厂出货。而 new ()则是生产部经理, new ()方法可以决定是否将原料提供给该生产部工人,同时它还决定着出 货产品是否为该生产部的产品,因为这名经理可以借该工厂的名义向客户出售完全不是该工厂的产品。 new ()方法的特性: new ()方法是在类准备将自身实例化时调用。 new ()方法始终都是类的静态方法,即使没有被加上静态方法装饰器。 类的实例化和它的构造方法通常都是这个样子: class MyClass(object): def __init__(self, *args, **kwargs): ... # 实例化 myclass = MyClass(*args, **kwargs) 1 2 3

python __new__ 与__init__函数

蹲街弑〆低调 提交于 2020-03-18 03:49:09
__new__ (cls[, ...]) This method is only used for new-style classes (classes inheriting from object ). Called to create a new instance of class cls . __new__ is a static method (special-cased so you need not declare it as such) that takes the class of which an instance was requested as its first argument. The remaining arguments are those passed to the object constructor expression (the call to the class). The return value of __new__ should be the new object instance (usually an instance of cls ). Typical implementations create a new instance of the class by invoking the superclass's __new__

Python下简易的单例模式详解(转)

狂风中的少年 提交于 2020-03-18 03:48:10
Python 下的单例模式 要点: 1.某个类只能有一个实例; 2.它必须自行创建这个实例; 3.它必须自行向整个系统提供这个实例 方法:重写new函数 应该考虑的情况: 1.这个单例的类可能继承了别的类 2.这个单例的类还有可能要接收参数来实例化 要点: 实例化的过程其实不是直接调用init的,首先是new分配一块空间来创建实例,再由init对这个实例进行初始化.我们无法阻止new和init的调用,我们只能是限制他们的内容,以此使他们能达到单例的目的 代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 class people( object ): def __new__( cls , * args, * * kargs): return super (people, cls ).__new__( cls ) def __init__( self ,name): self .name = name def talk( self ): print ( "hello,I am %s" % self .name) class student(people): def __new__( cls , * args, * * kargs): if not hasattr ( cls ,

Python练习题(五)

*爱你&永不变心* 提交于 2020-03-18 03:47:35
1.如何反向迭代一个序列 #如果是一个list,最快的方法使用reverse tempList = [1,2,3,4] tempList.reverse() for x in tempList: print x #如果不是list,需要手动重排 templist = (1,2,3,4) for i in range(len(templist)-1,-1,-1): print templist[i] 2.如何查询和替换一个文本中的字符串 #最简单的方法使用replace() tempstr = "hello you hello python are you ok" print tempstr.replace("you","python") #还可以使用正则,有个sub() tempstr = "hello you hello python are you ok" import re rex = r'(hello|Use)' print re.sub(rex,"Bye",tempstr) 3.使用python实现单例模式 #方法一:可以使用__new__方法 #在__new__方法中把类实例绑定到类变量_instance上,如果cls._instance为None表示该类还没有实例化过,实例化该类并返回。如果cls_instance不为None表示该类已实例化,直接返回cls

python 全栈开发,Day23(复习,isinstance和issubclass,反射)

岁酱吖の 提交于 2020-03-18 02:06:17
一、复习 class A: def func1(self):pass def func2(self): pass def func3(self): pass a = A() b = A() print(A.func1) print(a.func1) print(b.func1) 执行输出: <function A.func1 at 0x00000286A24EAA60> <bound method A.func1 of <__main__.A object at 0x00000286A2381048>> <bound method A.func1 of <__main__.A object at 0x00000286A2381358>> bound 表示绑定的意思。当类A实例化时,会将里面的方法与做类做绑定。 class A: def func1(self):pass # 对象与方法之间的绑定 @classmethod def func2(self): pass # 类与方法之间的绑定 @classmethod def func3(self): pass a = A() b = A() #普通方法 对象和类绑定的过程 print(A.func2) print(a.func2) # 对象能找到类 类里面绑着方法 print(b.func2) 执行输出: <bound method A