最近在做一个项目,是Android程序跟单片机之间通讯的,需求是Android程序给单片机发送一堆数据之后,要对这些数据进行CRC校验,手机端自己算一个校验值,发送给单片机,由单片机跟单片机部分算出的校验值做对比...刚开始用Java自带的CRC校验类做校验,用CRC校验工具测试,结果一致,于是满怀信心的开始跟单片机正式测试,结果校验失败。以为是大小端的原因,就改了下发送的部分,结果还是失败。...恰好服务端的c#工程师也做了这个功能,于是借用他的校验算法,再次满怀信心的去测试,还是失败。 静静分析了下,c#工程师是把每个数据转成uint,然后去校验的。...于是,费尽九牛二虎之力,将每个数据都转成uint32的整数,实现代码如下(在网上找的) public static long bytes2int(byte[] src){ int firstByte...= 0; int secondByte = 0; int thirdByte = 0; int fourthByte = 0; int index = 0; long anUnsignedInt =
用过mybatis的人都知道mybatis的特点就是sql写在配置文件中,使用者使用的时候只需要调相对应的接口方法,或者是ibatis那种调配置文件中的ID。...jdk提供了一个生成接口的实现类,其方法调用内容都来自于指定的接口实现类的方法,也就是说,你在你的代码里写的mapper接口,在mybatis中看来都会被转到mybatis自定义的真正执行类,想一想为什么接口方法名和...ProxyFactory.java 首先看看这个实例生成的方法,ProxyFactory.java: import java.lang.reflect.Proxy; /** * @author gavin...正在说hello 正在说goodbye 未实现 other Mapper的实现 mapper的实现就是基于jdk提供的这个实现方法,从使用者自定义的接口中获取方法名,入参和出参,然后综合判断后执行对应的...知道了这个原理,我们也能自己写一个简单版的sql执行器了。 在配置文件中配置key和sql。 在代码运行第一步加载key和sql到InvocationHandler接口实现类中的map中。
我们知道Python语法本身并不支持函数重载,龟叔2005年写的一篇博文中说到:函数重载太高级了以至于他不会用到。...因为不支持函数重载,所以下面两个f的定义,第二个会覆盖第一个,因此调用第一个会报错:第一个 def f(a: int): print(f'a={a}') 第二个 def f(a: int, b...(types) if function is None: raise TypeError(f"{types}不支持") return function...self.type_dict[types] = function 这样后multimethod装饰器就具备函数重载功能,以下foo分别重载2个int,2个float,2个str @multimethod...(int, int) def foo(a, b): # 对整型a和b处理 print(f"a={a}, b={b}") @multimethod(float, float) def foo
之后,底层的实例字典会根据需要适当的进行调整。 要使用一个描述符,首先要创建一个描述符类,然后把描述符的实例放在类的定义中作为类变量来使用。...raise TypeError('Expected an int') instance....('Expected an int') TypeError: Expected an int 每一个描述符方法都会接受被操作的实例作为输入。...要执行所请求的操作,底层的实例字典(即dict属性)会根据需要进行适当的调整。描述符的self.name属性会保存字典的键值,通过这些键可以找到储存在实例字典中的实例数据。...,get()方法实现也复杂一些,因为实例变量和类变量是有区别的。
其中第2个构造方法和第3个构造方法尽管都有一个参数,但类型分别是int和long。...Python为什么在语法上不支持方法重载 首先下一个结论,Python不支持方法重载,至少在语法层次上不支持。但可以通过变通的方式来实现类似方法重载的效果。...也就是说,按正常的方式不支持,但你想让他支持,那就支持。要知详情,继续看下面的内容。 我们先来看一下Python为什么不支持方法重载,前面说过,方法重载需要3个维度:方法名、数据类型和参数个数。...参数分别使用了int注解和str注解标注为整数类型和字符串类型。...我们采用的方案是创建一个MultiMethod类,用于保存同名方法的所有实例,而key不变,仍然是方法名,只是value不再是方法对象,而是MultiMethod对象。
2017-10-13 10:14:59 首先来说一下名词解释,首先说一下prototype,每个函数都有一个prototype属性,这个属性是指向一个对象的引用,这个对象称为原型对象,原型对象包含函数实例共享的方法和属性...,也就是说将函数用作构造函数调用(使用new操作符调用)的时候,新创建的对象会从原型对象上继承属性和方法。...当我们将该函数作为模版创建实例(new方法)的时候,我们发现创建出的实例是一个与构造函数同名的object,这个object是独立的,他只包含了一个__proto__指针(实例没有prototype,强行访问则会输出...之所以加上引号,因为构造函数和实例之间无法直接访问,需要通过__proto__指针间接读取。 function ab(){} var c = new ab(); console.log(c....即使是使用new方法从function构造出的实例对象也没有prototype属性。
= Temperature(212) print(t.celsius) # 输出100.0 t.celsius = 0 print(t.fahrenheit) # 输出32.0 以上代码实现了温度的摄氏温度和华氏温度之间的自动转换...其中Temperature类含有实例变量fahrenheit和类变量celsius,celsius由描述器Celsius进行代理。由这段代码引出的三点疑问: 疑问一:什么是描述器?...__dict__[self.name] = value 15 TypeError: Attribute name expected 但是上述类型检查的方法存在一些问题...总共有三种方法: Getters和Setter。我们可以使用方法来封装每个实例变量,获取和设置该实例变量的值。为了确保实例变量不被外部访问,可以把这些实例变量定义为私有的。...__dict__ class Int: def __get__(self, instance, cls): return 3 class A: val = Int()
", line 1, in dict['ff'] KeyError: 'ff' 9.TypeError: pop expected at least 1...#7>", line 1, in dict.pop() TypeError: pop expected at least 1 arguments, got 0 10.TypeError...: Can’t convert ‘int’ object to str implicitl 类型错误:不能转换整形成字符串。...: Can't convert 'int' object to str implicitly 11....TypeError: 'range' object does not support item assignment 类型错误:range不支持item操作。
Python 的变量没有类型,因此 Python 语法本身不支持函数重载,因此有人说 Python 不支持函数重载这话本身是正确的,不过本文想说的是,Python 动态语言的灵活性根本不需要通过函数重载就可以实现一个函数多个功能...Python 中一切皆对象,比如说 1 是 int 的实例,int 是 type 实例: In [7]: a = 5 In [8]: type(a) Out[8]: int In [9]: type...从上述可以看出,type(object) 返回 object 的类型,而 type(name, bases, dict) 会产生一个新的类型,也就是说 type(name, bases, dict)...,因此 Python 类不支持函数重载。...__new__(mcs, name, bases, overload_namespace, **kwargs) 这里面有个 Overload 类,它的作用就是将函数的签名和定义作一个映射,当我们使用
日常测试中,经常会使用py的 set 和 dict,set 是用 dict 实现,因为本身 dict 的 key 就是会被去重,value 设置为 None 即可作为 set 使用。...Python 中的 dict 内部使用了哈希表的方式实现,所以对于 key 的要求就是需要计算哈希值。在 Python 的类型体系中,有些类型是支持计算哈希值,有些并不支持。...所以我们可以知道,使用不支持计算哈希值的类型作为 dict 或 set 的 key 就会报错。 ?...错误案例 以下皆报错 TypeError: unhashable type: 'list' # list 作为 dict 的 key key = ["news", "hot"] news = {} news...对于可变的类型计算哈希值是不可靠的,当数据发生变化时哈希值也要变化。哈希计算的意义在于用哈希值来区分变量,哈希值会随着变量内容而变化,所以对于这类可变类型来说,不支持哈希值是合理的。
0x01 类的本质 何为类?类是对现实生活中一类具有共同特征的事物的抽象,它描述了所创建的对象共同的属性和方法。在常见的编译型语言(如C++)中,类在编译的时候就已经确定了,运行时是无法动态创建的。...0x02 使用type动态创建类 type的参数定义如下: type(name, bases, dict) name: 生成的类名 bases: 生成的类基类列表,类型为tuple dict:...因此,使用动态创建类的方法可以很好地解决这个问题。 0x03 使用元类(metaclass) 类是实例的模版,而元类是类的模版。...(val) if not isinstance(val, int): raise TypeError('类型错误:%s' % type(val))...,如上面的c_ubyte * 5,提升了代码可读性和技巧性。
0x01 类的本质 何为类?类是对现实生活中一类具有共同特征的事物的抽象,它描述了所创建的对象共同的属性和方法。在常见的编译型语言(如C++)中,类在编译的时候就已经确定了,运行时是无法动态创建的。...0x02 使用type动态创建类 type的参数定义如下: type(name, bases, dict) name: 生成的类名 bases: 生成的类基类列表,类型为tuple dict: 生成的类中包含的属性或方法...(val) if not isinstance(val, int): raise TypeError('类型错误:%s' % type(val))...(self.value), None) else: raise TypeError('类型错误:%s' % type(val)) def __int__...,如上面的c_ubyte * 5,提升了代码可读性和技巧性。
Python数据类型转换 由于不同的数据类型之间是不能进行运算的,所以我们需要数据类型转换。...数字类型之间相互转换 ''' a = 123 # int res = float(a) print(res, type(res)) # 123.0 a = True...' # str res = int(a) print(res, type(res)) # 此时python会报错,报错类型为TypeError a = [1, 2, 3] # list res...2 4.元组类型转字典类型,列表必须为等长二级容器,子容器中的元素个数必须为2集 5.合不能转字典类型,因为集合不支持哈希 a = '123' # str res = dict(a) print(res...res = dict(a) print(res,type(res)) # 此时python会报错:TypeError: unhashable type: 'set' 总结 本篇文章就到这里了,希望能够给你带来帮助
对象的类型也称对象的类别,用于描述对象的内部表示及它支持的方法和操作。 创建特定类型的对象时,有时也将该对象称为该类型的实例。 ...实例被创建后,其身份和类型就不可改变 如果对象值是可修改的,则称为可变对象; 如果对象值不可修改,则称为不可变对象 如果某个对象包含对其它对象的引用,则将其称为容器。 ...大多数对象都拥有大量特有的数据属性和方法 属性:与对象相关的值。在对象实例化时,在对象内部可以使用的变量的变量名称就称之为对象的属性。 ...,称为对象的类 该对象的定义是唯一的,且对于某类型的所有实例都是相同的 所有类型对象都有一个指定的名称,可用于执行类型检查,如list、dict if a is ...比如一个数字和一个字母相运算,这是个抛出异常的。因为此两者不是同一种类型,在python中不同类型之间是无法进行运算的。
参考链接: Python中的用户定义异常 导入模块错误 输入: import a 运行后结果为:importerror 指的是错误类型,引入错误 ,错误说明:提示没有命名的模块 索引错误 输入:...字典键值错误 输入: dict1={'name':'beij','age':20,'gender':'男'} print dict1['name1'] 运行结果:KeyError 键值错误,字典中不存在的键...: if 1==1: print 'aaa' 提示缩进错误, 语法错误:SyntaxError list2 = [1,2,3,4 执行后:提示 invalid syntax 无效语法 TypeError...:不同类型间的无效操作 print 1+'1' 运行后:提示 TypeError:不支持的操作数类型(s)为+:“int”和“STR” ZeroDivisionError:除数为0 print...和2是无法相加的 语言里面的错误,展示给用户的就是这样的,我们要学会看异常,根据异常来处理问题 都是要固定的错误格式的 调试时我们关心 什么类型的错误?
目录: 一、组合 二、类、类对象和实例对象 三、到底什么是绑定 四、课时39课后习题及答案 *********** 一、组合 *********** 现在要求定义一个类,叫水池,水池里要有乌龟和鱼...: 'int' object is not callable 为了避免名字上的冲突,大家应该遵守一些约定俗成的规定: (1)类的定义要“少吃多餐”,不要试图在一个类里边定义出所有能想到的特性和方法,应该利用继承和组合机制来进行扩展...,不现实类属性和特殊属性,键表示的是属性名,值表示属性相应的数据值。...__dict__ {'x': 4, 'y': 5} 现在实例对象dd有了两个新属性,而且这两个属性仅属于实例对象的: >>> CC....甚至类对象中都看不到x和y,因为这两个属性是只属于实例对象dd的。
---- 在前面的一篇文章《Python中的5对必知的魔法方法》中所介绍的“魔法方法”,或者说是特殊方法,其命名均是双下划线开始和结束。英文中称为“dunder methods”。...为了更充分理解这类方法,本文通过一个示例,专门介绍此类方法的特点。 构建四元数对象 四元数是一个代数概念,通常用于描述旋转,特别是在3D建模和游戏中有广泛的应用。 其中 。...下面就一步一步演示此对象的创建方法,特别要关注双下划线开始和结束的那些特殊方法。...但是,它没有友好的输出。接下来可以通过定义__repr__和__str__,让它对机器或者开发者都更友好。...这里使用了实例对象的__dict__属性,它以字典形式包含了实例的所有属性,请参考《Python大学实用教程》中的详细讲解。 乘法 乘法,如果了解一下线性代数,会感觉有点复杂。
) code:传入的文本代码 global_dic:传入的字典,接收的是全局名称空间和内置名称空间 local_dict:传入的字典,接收局部名称空间 例子 code = ''' global x x...) #global_dict返回全局名称空间和内置名称空间 print(local_dict) #local_dict返回局部名称空间 {'x': 10, '__builtins__': {'__name...元类的主要目的是为了控制类的创建行为。 type是Python的一个内建元类,用来直接控制生成类,在python当中任何class定义的类其实都是type类实例化的结果。...2.2自定义创建元类 自定义一个类,继承type类,派生出自己的属性和方法 需要使用元类的类通过metaclass指定自定义好的元类。...) if not class_name.istitle(): raise TypeError('类的首字母必须大写') if not class_dict.get
# 描述器只能在类级别被定义 # 操作实例底层的字典 (__dict__ 属性) # 描述器的 self.name 属性存储了在实例字典中被实际使用到的 key # 描述器的 字典值...属性存储了在实例字典中被实际使用到的 value def __init__(self, name): self.name = name #把实例名放入字典 def...__dict__[self.name] #把实例名和值写入字典 def __set__(self, instance, value): if not isinstance...(value, int): raise TypeError('Expected an int') instance....int
字典的每个键值 key=>value 对用冒号 : 分割,每个对之间用逗号(,)分割,整个字典包括在花括号 {} 中 ,格式如下所示: d = {key1 : value1, key2 : value2... ---- 访问字典里的值 把相应的键放入到方括号中,如下实例: 实例 #!...line 9, in print ("dict['Age']: ", dict['Age']) TypeError: 'type' object is not subscriptable...', 'Age': 7} TypeError: unhashable type: 'list' ---- 字典内置函数&方法 Python字典包含了以下内置函数: 序号 函数及描述 实例 1 len(dict...12 popitem()随机返回并删除字典中的最后一对键和值。
领取专属 10元无门槛券
手把手带您无忧上云