cls

c++重学笔记4 - 用const重载成员函数

混江龙づ霸主 提交于 2020-03-17 20:45:43
喜欢这篇文章吗?喜欢的话去看博主的置顶博客,即可依据分类找到此文章的原版得到更好的体验, 图片及代码显示的问题,笔者深感抱歉,想要更好的体验去原博文即可。 title: c++重学笔记4 - 用const重载成员函数 mathjax: true date: 2020-03-13 16:18:03 categories: [c++重学笔记] tags: [c++重学笔记] keywords: [c++重学笔记] const 能够重载成员函数    为什么要重载一遍const? 目前笔者也不太懂,只知道const能够让c++代码更加高效。下面的代码解释了如何使用const重载成员函数,大概是这样的,const对象调用成员函数的时候会调用const版,普通的对象调用普通版。 # include <iostream> using namespace std ; class my_class { int x = 1 , y = 2 ; public : const int & get ( ) const { std :: cout << "x" << std :: endl ; return x ; } // int& get() const {return x; } 这句话不被允许编译,因为可能会改变x的值 int & get ( ) { std :: cout << "y" << std

iOS Runtime中如何通过SEL找到IMP

不想你离开。 提交于 2020-03-17 12:04:00
objc_msgSend(id self, SEL _cmd, ...) 中SEL找到IMP的流程 以下是苹果开源代码中Runtime底层的部分删减后的汇编代码 ENTRY _objc_msgSend ldr x13, [x0] // x13 = isa and x16, x13, #ISA_MASK // x16 = class cmp x0, #0 // nil check and tagged pointer check b.le LNilOrTagged // (MSB tagged pointer looks negative) LGetIsaDone: CacheLookup NORMAL // calls imp or objc_msgSend_uncached LNilOrTagged: b.eq LReturnZero // nil check END_ENTRY _objc_msgSend 1.首先会进入汇编中 ENTRY _objc_msgSend 2.如果指针小于等于 LNilOrTagged 直接 return 返回 3.通过 isa 找到相应类 class 4. CacheLookup : NORMAL CacheLookup 源码中注释为: Locate the implementation for a selector in a class

python中的pika模块

心不动则不痛 提交于 2020-03-11 10:59:02
工作中经常用到rabbitmq,而用的语言主要是python,所以也就经常会用到python中的pika模块,但是这个模块的使用,也给我带了很多问题,这里整理一下关于这个模块我在使用过程的改变历程已经中间碰到一些问题 的解决方法 刚开写代码的小菜鸟 在最开始使用这个rabbitmq的时候,因为本身业务需求,我的程序既需要从rabbitmq消费消息,也需要给rabbitmq发布消息,代码的逻辑图为如下: 下面是我的模拟代码: #! /usr/bin/env python3 # .-*- coding:utf-8 .-*- import pika import time import threading import os import json import datetime from multiprocessing import Process # rabbitmq 配置信息 MQ_CONFIG = { "host": "192.168.90.11", "port": 5672, "vhost": "/", "user": "guest", "passwd": "guest", "exchange": "ex_change", "serverid": "eslservice", "serverid2": "airservice" } class RabbitMQServer

python 面向对象练习题

时间秒杀一切 提交于 2020-03-09 14:59:52
1,面向对象三大特性,各有什么用处,说说你的理解。 继承:解决代码重用问题 多态:多态性,可以在不考虑对象类型的情况下而直接使用对象 封装:明确的区分内外,控制外部对隐藏属性的操作行为,隔离复杂度 2,类的属性和对象的属性有什么区别? 类的属性:数据属性和函数属性,数据属性是所有对象共有的,函数属性是绑定对象使用的 对象的属性:对象是类的实例化 3,面向过程编程与面向对象编程的区别与应用场景? 面向过程:复杂的问题流程化,简单化 应用场景:不再需要扩展了,监测脚本,自动部署脚本,软件解压安装 面向对象:特征与技能的结合体 一切皆对象 应用场景:用户需求经常变化,互联网应用,游戏,企业内部应用 4,类和对象在内存中是如何保存的。 类和对象的属性:以字典的形式保存的 5,什么是绑定到对象的方法、绑定到类的方法、解除绑定的函数、如何定义,如何调用,给谁用?有什么特性 绑定到对象的方法:就应该由对象来调用,def tell_info(self):...obj.tell_info() 绑定到类的方法:就应该由类来调用,@classmethod def from_conf(cls):... class.from_conf() 非绑定方法:不与类或对象绑定,谁都可以调用,@staticmethod def create_id():... obj.create_if()/class.create

python面向对象进阶之元类metaclass

柔情痞子 提交于 2020-03-09 12:17:15
一:知识储备 exec exec:三个参数 参数一:字符串形式的命令 参数二:全局作用域(字典形式),如果不指定,默认为globals() 参数三:局部作用域(字典形式),如果不指定,默认为locals() exec的应用: #可以把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} __call__方法:对象后面加括号,触发执行。 注:构造方法的执行是由创建对象触发的,即:对象 = 类名() ;而对于 __call__ 方法的执行是由对象后加括号触发的,即:对象() 或者 类()() class Foo: def __init__(self): pass def __call__(self, *args, **kwargs): print('__call__') obj = Foo() # 执行 __init__ obj() # 执行 __call__ __call__的应用: # 知识储备__call__方法 class Foo: def __call__(self, *args

Python new方法与单例模式

左心房为你撑大大i 提交于 2020-03-09 00:53:19
在网上看了很多关于 __new__() 魔法方法的教程,毫无疑问大部分都是单例模式相关,确实如此,利用 __new__() 魔法方法的特性,在 Python 中很容易实现单例模式。 在面向对象编程的语言中,很多语言都有一个构造函数,例如 Java 和 C++ ,在 Python中 也存在一个构造函数 __init__() ,不过在 python 中叫做魔法方法,在类实例化的时候初始化类成员变量。运行下面的程序将会打印 init 字符串。 class test : def __init__ ( self ) : print ( 'init' ) if __name__ == '__main__' : a = test ( ) #程序输出 #init 刚开始学习 Python 的时候我觉得在类实例化的过程中第一运行的就是 __init__() 方法,后来发现还有一个比它先运行的魔法方法 __new__() 方法,运行下面的代码可以看到确实如此。 class test : def __init__ ( self ) : print ( 'init' ) def __new__ ( cls , * args , ** kwargs ) : print ( 'new' ) if __name__ == '__main__' : a = test ( ) #程序输出 #new 但是。。。

元类metaclass

依然范特西╮ 提交于 2020-03-08 03:09:52
一 前言 二 什么是元类 三 class关键字创建类的流程分析 五 自定义元类控制类OldboyTeacher的创建 六 自定义元类控制类OldboyTeacher的调用 六 再看属性查找 七 练习题 一 前言 元类属于python面向对象编程的深层魔法,99%的人都不得要领,一些自以为搞明白元类的人其实也只是自圆其说、点到为止,从对元类的控制上来看就破绽百出、逻辑混乱,今天我就来带大家来深度了解python元类的来龙去脉。 笔者深入浅出的背后是对技术一日复一日的执念,希望可以大家可以尊重原创,为大家能因此文而解开对元类所有的疑惑而感到开心!!! 二 什么是元类 一切源自于一句话:python中一切皆为对象。让我们先定义一个类,然后逐步分析 class OldboyTeacher(object): school='oldboy' def __init__(self,name,age): self.name=name self.age=age def say(self): print('%s says welcome to the oldboy to learn Python' %self.name) 所有的对象都是实例化或者说调用类而得到的(调用类的过程称为类的实例化),比如对象t1是调用类OldboyTeacher得到的 t1=OldboyTeacher('egon',18)

实现 classmethod装饰器

萝らか妹 提交于 2020-03-07 10:46:10
实现 classmethod装饰器 from functools import wraps, partial class Classmethod: def __init__(self, method): wraps(method)(self) def __get__(self, instance, cls): return partial(self.__wrapped__, cls) class C: @Classmethod def method(cls): print(cls) @Classmethod def method2(cls, x): print(cls) print(x) c =C() c.method() c.method2(1) 来源: 51CTO 作者: pythoner小智 链接: https://blog.51cto.com/14730644/2476069

通讯录管理系统

末鹿安然 提交于 2020-03-03 23:03:55
通讯录管理系统 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。 本教程主要利用C++来实现一个通讯录管理系统 系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 显示联系人:显示通讯录中所有联系人信息 删除联系人:按照姓名进行删除指定联系人 查找联系人:按照姓名查看指定联系人信息 修改联系人:按照姓名重新修改指定联系人 清空联系人:清空通讯录中所有信息 退出通讯录:退出当前使用的通讯录 花了我好几个小时时间终于写出来了,也算对前几天的学习做一个回顾吧! 功能比较简单,没有进行文件的读取保存 # include <iostream> # include <stdlib.h> using namespace std ; # define MAX 1000 //最大存储人数 //定义通讯录内联系人结构体 struct addressPerson { string name ; //姓名 string addr ; //地址 string phone ; //电话 int sex ; //性别,用1来代替男,2来代替女 其它提示错误 } ; //定义通讯录结构体 struct addressBooks { addressPerson personaddr [ MAX ] ; //通讯录能存储人数个数

手撸ORM

99封情书 提交于 2020-03-03 00:20:14
ORM即Object Relational Mapping,全称对象关系映射。 当我们需要对数据库进行操作时,势必需要通过连接数据、调用sql语句、执行sql语句等操作,ORM将数据库中的表,字段,行与我们面向对象编程的类及其方法,属性等一一对应,即将该部分操作封装起来,程序猿不需懂得sql语句即可完成对数据库 Django's ORM 优点: 1. 易用,学习曲线短 2. 和Django紧密集合,用Django时使用约定俗成的方法去操作数据库 缺点: 3. 不好处理复杂的查询,强制开发者回到原生SQL 4. 紧密和Django集成,使得在Django环境外很难使用 peewee 优点: 5. Django式的API,使其易用 6. 轻量实现,很容易和任意web框架集成 缺点: 7. 多对多查询写起来不直观 SQLAlchemy 优点: 8. 企业级 API,使得代码有健壮性和适应性 9. 灵活的设计,使得能轻松写复杂查询 缺点: 10. 重量级 API,导致长学习曲线 其它:SQLObject 、Storm 、、、、 ORM 池版 Db_pool from DBUtils.PooledDB import PooledDB import pymysql POOL = PooledDB( creator=pymysql, # 使用链接数据库的模块 maxconnections=6,