cls

classmethod

给你一囗甜甜゛ 提交于 2020-03-01 20:09:42
class A(object): # 属性默认为类属性(可以给直接被类本身调用) num = "类属性" # 实例化方法(必须实例化类之后才能被调用) def func0(self): # self : 表示实例化类后的地址id print("func0") print(self) @classmethod def func1(cls): # self : 表示实例化类后的地址id cls.fun1="func1" # 类方法(不需要实例化类就可以被类本身调用) @classmethod def func2(cls): # cls : 表示没用被实例化的类本身 print('1 直接调用:默认类属性') print(cls.num,'\n') print('2 实例化调用:self方法') cls().func0() print('\n') print('3 直接调用:公共方法下的公共变量') print(cls.func1,'\n') #直接调用:类属性(定义类属性) print('4 打印当前方法') print("func2") print(cls) A.func2() 运行结果: 参考文档地址: https://www.runoob.com/python/python-func-classmethod.html 来源: CSDN 作者: csdn__YX 链接: https

Java编程的逻辑 (84) - 反射

青春壹個敷衍的年華 提交于 2020-03-01 19:13:02
上节介绍完了并发,从本节开始,我们来探讨Java中的一些动态特性,包括反射、类加载器、注解和动态代理等。利用这些特性,可以以优雅的方式实现一些灵活和通用的功能,经常用于各种框架、库和系统程序中,比如: 在63节介绍的实用序列化库Jackson,利用反射和注解实现了通用的序列化/反序列化机制 有多种库如Spring MVC, Jersey用于处理Web请求,利用反射和注解,能方便的将用户的请求参数和内容转换为Java对象,将Java对象转变为响应内容 有多种库如Spring, Guice利用这些特性实现了对象管理容器,方便程序员管理对象的生命周期以及其中复杂的依赖关系 应用服务器比如Tomcat利用类加载器实现不同应用之间的隔离、JSP技术也利用类加载器实现修改代码不用重启就能生效的特性 面向方面的编程(AOP - Aspect Oriented Programming)将编程中通用的关注点比如日志记录、安全检查等与业务的主体逻辑相分离,减少冗余代码,提高程序的可维护性,AOP需要依赖上面的这些特性来实现 本节先来看反射机制。 在一般操作数据的时候,我们都是知道并且依赖于数据的类型的,比如: 根据类型使用new创建对象 根据类型定义变量,类型可能是基本类型、类、接口或数组 将特定类型的对象传递给方法 根据类型访问对象的属性,调用对象的方法 编译器也是根据类型,进行代码的检查编译。

如何在C/C++中调用Java

旧街凉风 提交于 2020-02-29 07:52:36
转的一篇文章,看的不懂,先坐下记录吧~~~ java跨平台的特性使Java越来越受开发人员的欢迎,但也往往会听到不少的抱怨:用Java开发的图形用户窗口界面每次在启动的时候都会跳出一个控制台窗口,这个控制台窗口让本来非常棒的界面失色不少。怎么能够让通过Java开发的GUI程序不弹出Java的控制台窗口呢?其实现在很多流行的开发环境例如JBuilder、Eclipse都是使用纯Java开发的集成环境。这些集成环境启动的时候并不会打开一个命令窗口,因为它使用了JNI(Java Native Interface)的技术。通过这种技术,开发人员不一定要用命令行来启动Java程序,可以通过编写一个本地GUI程序直接启动Java程序,这样就可避免另外打开一个命令窗口,让开发的Java程序更加专业。 JNI答应运行在虚拟机的Java程序能够与其它语言(例如C和C++)编写的程序或者类库进行相互间的调用。同时JNI提供的一整套的API,答应将Java虚拟机直接嵌入到本地的应用程序中。图1是Sun站点上对JNI的基本结构的描述。 本文将介绍如何在C/C++中调用Java方法,并结合可能涉及到的问题介绍整个开发的步骤及可能碰到的难题和解决方法。本文所采用的工具是Sun公司创建的 Java Development Kit (JDK) 版本 1.3.1,以及微软公司的Visual C++ 6开发环境。

类的起源与metaclass

China☆狼群 提交于 2020-02-28 10:34:44
一、概述   我们知道类可以实例化出对象,那么类本身又是怎么产生的呢?我们就来追溯一下类的起源。 二、类的起源   2.1 创建一个类  class Foo(object): def __init__(self, name): self.name = name f = Foo('bigberg') # 我们创建一个 Foo的类 # 实例化一个 对象 f   在python中有个说法:一切皆为对象。如果按照一切事物都是对象的理论:obj对象是通过执行Foo类的构造方法创建,那么Foo类对象应该也是通过执行某个类的 构造方法 创建。 print(type(f)) print(type(Foo)) # 输出 <class '__main__.Foo'> <class 'type'> # 对象 f 由类 Foo创建 # Foo类由 type 创建   所以, f对象是Foo类的一个实例 , Foo类对象是 type 类的一个实例 ,即:Foo类对象 是通过type类的构造方法创建。   2.2 type 创建类   type创建类的格式,类名 = type('类名',(父类,),{'方法名':方法的内存地址})   def func(self): # 定义一个函数 print('hello,world') Foo = type('Foo', (object,), {'talk': func

自己动手写一个简易对象关系映射,ORM(单例版和数据库池版)

 ̄綄美尐妖づ 提交于 2020-02-28 03:22:28
准备知识 DBUtils模块 <<-----重点 DBUtils是Python的一个用于实现数据库连接池的模块 此连接池有两种连接模式: DBUtils提供两种外部接口: PersistentDB :提供线程专用的数据库连接,并自动管理连接。 PooledDB :提供线程间可共享的数据库连接,并自动管理连接。 from DBUtils.PooledDB import PooledDB import pymysql POOL = PooledDB( creator=pymysql, # 使用链接数据库的模块 maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数 mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建 maxcached=5, # 链接池中最多闲置的链接,0和None不限制 maxshared=3, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。 blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错 maxusage=None, # 一个链接最多被重复使用的次数

简易orm、fuckorm

一世执手 提交于 2020-02-28 03:21:13
一 前言 1 我在实例化一个user对象的时候,可以user=User(name='fixdq',password='123') 2 也可以 user=User()     user['name']='fixdq'     user['password']='123' 3 也可以 user=User()     user.name='fixdq     user.password='password' 前两种,可以通过继承字典dict来实现,第三种,用getattr和setattr __getattr__ 拦截点号运算。当对未定义的属性名称和实例进行点号运算时,就会用属性名作为字符串调用这个方法。如果继承树可以找到该属性,则不调用此方法 __setattr__会拦截所有属性的的赋值语句。如果定义了这个方法,self.arrt = value 就会变成self,__setattr__("attr", value).这个需要注意。当在__setattr__方法内对属性进行赋值是,不可使用self.attr = value,因为他会再次调用self,__setattr__("attr", value),则会形成无穷递归循环,最后导致堆栈溢出异常。应该通过对属性字典做索引运算来赋值任何实例属性,也就是使用self.__dict__['name'] = value 二 定义Model基类

激光套料软件哪个好用

醉酒当歌 提交于 2020-02-26 15:37:40
1.clang输出cpp 为FXPerson新建一个分类FXPerson-FX 终端利用clang输出cpp clang -rewrite-objc FXPerson+FX.m -o cate.cpp 复制代码2.底层分析 从cpp文件最下面看起,首先看到分类是存储在MachO文件的__DATA段的__objc_catlist中 static struct category_t *L_OBJC_LABEL_CATEGORY $ [1] attribute ((used, section ("__DATA, __objc_catlist,regular,no_dead_strip")))= { & OBJC KaTeX parse error: Expected group after '_' at position 19: …TEGORY_FXPerson_̲ _FX, }; 复制代码其次能看到FXPerson分类的结构 static struct _category_t OBJC KaTeX parse error: Expected group after '_' at position 19: …TEGORY_FXPerson_̲ _FX attribute ((used, section ("__DATA,_ objc_const"))) = { “FXPerson”, 0

python 简单元编程

夙愿已清 提交于 2020-02-26 02:27:57
软件开发领域中最经典的口头禅就是“don’t repeat yourself”。 也就是说,任何时候当你的程序中存在高度重复(或者是通过剪切复制)的代码时,都应该想想是否有更好的解决方案。 在Python当中,通常都可以通过元编程来解决这类问题。 简而言之,元编程就是关于创建操作源代码(比如修改、生成或包装原来的代码)的函数和类。 主要技术是使用装饰器、类装饰器和元类。   一、你想在函数上添加一个包装器,增加额外的操作处理(比如日志、计时等)。   之前思路:利用装饰器。   装饰器最基本的原理如下:   @timethis def countdown(n): pass   效果等同如下: def countdown(n): pass countdown = timethis(countdown)   所以我们在inner函数中实现我们想要的业务逻辑即可。 def wraper(func): def inner(*args,**kwargs): # 你想实现的额外功能 res = func() return res return inner 但是如果我们打印 func.__name__,就会出现inner,这个函数的重要的元信息比如名字、文档字符串、注解和参数签名都丢失了。   二、如何解决上述问题呢   注意:任何时候你定义装饰器的时候,都应该使用 functools 库中的

《动手学深度学习》Task09:目标检测基础+图像风格迁移+图像分类案例1

前提是你 提交于 2020-02-26 00:26:02
1 目标检测基础 1.1 目标检测和边界框(9.3) % matplotlib inline from PIL import Image import sys sys . path . append ( '/home/kesci/input/' ) import d2lzh1981 as d2l # 展示用于目标检测的图 d2l . set_figsize ( ) img = Image . open ( '/home/kesci/input/img2083/img/catdog.jpg' ) d2l . plt . imshow ( img ) ; # 加分号只显示图 1.1.1 边界框 # bbox是bounding box的缩写 dog_bbox , cat_bbox = [ 60 , 45 , 378 , 516 ] , [ 400 , 112 , 655 , 493 ] def bbox_to_rect ( bbox , color ) : # 本函数已保存在d2lzh_pytorch中方便以后使用 # 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式: # ((左上x, 左上y), 宽, 高) return d2l . plt . Rectangle ( xy = ( bbox [ 0 ] , bbox [ 1 ] ) , width

iOS 底层探索 - cache_t

 ̄綄美尐妖づ 提交于 2020-02-25 19:17:48
上一篇我们一起探索了 iOS 类的底层原理,其中比较重要的四个属性我们都简单的过了一遍,我们接下来要重点探索第三个属性 cache_t ,对于这个属性,我们可以学习到苹果对于缓存的设计与理解,同时也会接触到消息发送相关的知识。 一、探索 cache_t 1.1 cache_t 基本结构 我们还是先过一遍 OC 中类的结构: struct objc_class : objc_object { // Class ISA; Class superclass ; cache_t cache ; // formerly cache pointer and vtable class_data_bits_t bits ; // class_rw_t * plus custom rr/alloc flags class_rw_t * data ( ) { return bits . data ( ) ; } . . . 省略代码 . . . } 接着我们查看源码中 cache_t 的定义: struct cache_t { struct bucket_t * _buckets ; mask_t _mask ; mask_t _occupied ; . . . 省略代码 . . . } 然后我们发现 cache_t 结构体的第一个成员 _buckets 也是一个结构体类型 bucket_t