大家好,又见面了,我是你们的朋友全栈君。 查阅python-can文档,知晓其支持部分周立功CAN接口卡,故写例程验证数据的发送。...另外,使用的python版本为3.4,在安装python-can时提示找不到windows-curses对应版本的安装包,故在python-can的setup.py中,取消了windows-curses...的安装依赖。...代码如下(ControlCAN.dll需放置在相同路径下): from __future__ import print_function import platform import can def...send_one(): bus = can.interface.Bus(bustype='canalystii', channel=0, baud=500000) msg = can.Message
,但是调用的过程不一样(虽然其实也就是多一个括号而已),那么有没有一种办法,使得我们调用属性的时候就会自动调用相应的方法,也就是增加一些额外的处理过程(例如类型检查或者验证)。...('Can not delete the name') AttributeError: Can not delete the name 正如例子中这样。...上面例子中的两种写法,一般倾向于第二种写法,特别是如果需要对某个普通的属性额外增加处理步骤时,可以在不修改已有代码的情况下将这个属性提升为一个property。...do not need (): c.area instead of c.area() print(c.perimeter) 78.53981633974483 31.41592653589793 这样的写法就会使得实例的接口变得统一...个人建议,不要在代码中不断重复使用@property,这样会使得代码变得臃肿,而且难以阅读,容易出错。同样的任务,利用描述符或者闭包也能够很好的完成(以后会详细解释)。
2、组合(composition,has-a)了哪些部件 组合可用来表述该车使用了哪些零部件,比如最新的发动机。 类与模块的不同之处 1、类可生成多个实例。2、类可被继承和扩展。...3、类实例的生命周期可控。4、类支持运算符,可按需重载。 这些特性模块没有或者不需要,同时,模块粒度大,模块可用来提供游戏场景级别的解决方案,而类则是该场景下的特定家族和演员。...其既不接收实例引用,也不参与类型处理,所以就没有自动传入第一参数。使用静态方法,更多原因是将类型作为一个作用域,或者当前类型添加便捷接口。...__ new __:构造方法,创建对象实例 __ init __:初始化方法,设置实例的相关属性 __ del __:析构方法,实例被回收时调用 创建实例时,会先调用析构方法和初始化方法。...五 总结 学习到此,我总算把类的创建,属性和方法等弄清楚了,我最想强调一点,希望读者把 实例 self 参数弄明白,后续编码过程中使用较多。 还要清楚实例方法和静态方法的区别。
调试技巧: 使用dir()函数查看对象的方法和属性。...] 调试技巧 使用print()函数 在调试时,print()函数是最简单也是最常用的工具。...numbers = [1, 2, 3] print(numbers) # 输出:[1, 2, 3] 使用pdb模块 Python内置的pdb模块可以让你在代码中设置断点,逐行执行代码,检查变量值。...使用logging模块 logging模块比print()更强大,可以记录程序运行过程中的各种信息。...无论是使用print()函数、pdb模块、logging模块,还是分解复杂的列表推导式,这些方法都能帮助你更高效地定位和解决问题。希望这些内容对你有所帮助,并能在实际工作中提高你的调试效率。
Python 没有像 Java 等某些语言那样,以 public 和 private 等关键词定义类,可以说所有的类都是 pbulic 的,8.7.1节介绍的以命名“私有化”形式实现封装,也不是 Java...为了实现密码只读的需求,使用了注释(1)所示的装饰器 @property ——这个装饰器是基于内置函数 property() ,并且将原来的方法 get_pwd() 更名为 password() (如注释...重新载入 mypassword 模块(参阅8.5.2节,最简单的方法是在交互模式中执行 exit() 函数退出后,在进入交互模式),执行如下操作: >>> from mypassword import...但,注释(4)貌似成功了,其实这也没有修改 laoqi.password 的值,只是为实例 laoqi 增加了一个名为 __password 的实例属性。如此,实现了密码的“只读”功能。...("Can't delete attribute") AttributeError: Can't delete attribute 重点看注释(12)的操作结果,之所抛出异常,是因为在程序中注释(11
很多时候我们可能需要对某个实例的属性加上除了修改、访问之外的其他处理逻辑,例如 类型检查、数值校验等,就需要用到描述器 ---《Python Cookbook》 我们可以使用 Python 自带的 property..._age = value 试一试,的确如代码写的一样,对属性的类型进行了检查,而且使用了 property 装饰器之后,对 age 方法的访问和对属性的访问一样,不需要加 () >>> a = Person...__get__ 方法 是通过 __getattribute__ 调用的,实际上,Python 中访问实例属性时,__getattribute__ 就会被调用,__getattribute__ 会查找整个继承链...,直到找到属性,如果没有找到属性,但是定义了 __getattr__ ,那么就会调用 __getattr__ 去查找属性,否则抛出 AttributeError __getattribute__ 的代码用...,如果实例字典中有与描述器同名的属性,如果是资料描述器,则优先使用资料描述器,否则使用实例字典中的属性 class AbsPriorityDescriptor: def __init__(self
prerequisite: Python装饰器 在面向对象编程中,我们通常希望一个类的属性具有一定程度的封装性,其他对象只能通过定义好的接口访问这些属性,而不能够随意修改。...在Python中如果我们不希望类的方法被修改,可以使用@Property装饰器。它可以修饰方法,将该被修饰的方法转为相同名称的只读属性;也可以与属性配合使用,来防止属性被修改。...即@Property装饰器常见使用场景有两个: 将方法转化为同名属性 与类的属性配合使用,防止属性被修改 将方法转化为同名属性 class Data: @property def printnum_with_property...,不能在通过对象名.方法名()访问到,只能是使用访问属性的方法即对象名.方法名来访问。..._count中的下划线可以不加,语法上也没有错误,但这种写法强调来_count是类的一个固有属性,是推荐写法。
9# Python将变量s视为一个本地的局部变量,但该变量未初始化。 解决方法: 在函数内使用全局变量时,使用global关键字对其进行声明即可。...八、 AttributeError 属性错误 报错信息: 1AttributeError: 'tuple' object has no attribute 'append' 2AttributeError...错误示例2: 1df = pd.read_excel(r'data.xlsx') 2df.col 3# 错误原因:DataFrame没有col属性,应该为columns。...解决方法: 正确书写类的属性名,不要发生书写错误。深刻理解元祖,列表的区别,可将元祖转换为列表添加元素。...解决方法: 这种报错常见于两种场景中,第一、未下载、安装该模块;第二、将调用的模块路径与被调用的模块路径不一致等。
AttributeError 当你访问一个对象的属性,但是这个属性并没有在这个对象定义的时候,就会引发 AttributeError。...' object has no attribute 'b' AttributeError 的错误消息行告诉我们特定对象类型(在本例中为 int)没有访问的属性, 在这个例子中属性为 b。...ImportError 在使用 import 导入模块时,如果要导入的模块找不到,或者从模块中导入模块中不存在的内容。...import 导入一个不存在的模块时,就会出现 ModuleNotFoundError 的错误,Traceback 最下面一句信息给出了原因, 没有名为 aaa 的模块....并没有太多的内容,但是,结合上面的错误信息,就可以解决这个问题。 NameError 当你引用了变量、模块、类、函数或代码中没有定义的其他名称时,将引发 NameError。
9# Python将变量s视为一个本地的局部变量,但该变量未初始化。 解决方法:在函数内使用全局变量时,使用global关键字对其进行声明即可。 ...八、 AttributeError 属性错误 报错信息: 1AttributeError: 'tuple' object has no attribute 'append' 2AttributeError...错误示例2: 1df = pd.read_excel(r'data.xlsx') 2df.col 3# 错误原因:DataFrame没有col属性,应该为columns。 ...解决方法:正确书写类的属性名,不要发生书写错误。深刻理解元祖,列表的区别,可将元祖转换为列表添加元素。 ...解决方法:这种报错常见于两种场景中,第一、未下载、安装该模块;第二、将调用的模块路径与被调用的模块路径不一致等。
,每种类型有各自的一些特殊用法,不能够张冠李戴,在使用某种方法的时候,注意这种数据类型是否支持。...我们定义的路径下并没有此文件。...属性错误,调用对象不存在的一个方法属性时将报这个错误。...------------------------------------ >>> print(f.readlines()) >>>UnicodeDecodeError: 'gbk' codec can't...API测试| 了解API接口测试| API接口测试指南 Fiddler工作原理 python中常见关于Excel表格读写操作 遇到一个新项目怎么办,不要慌,乘风破浪!
Python的抽象基类类似于Java、C++等面向对象语言中的接口的概念。...当子类被创建时元类会运行__new__方法,解释器讲不再允许创建没有run方法的子类。 >>> class SubTask(Task): ... pass ......@abstractmethod abc模块提供了一个使用某个抽象基类声明协议的机制,并且子类一定要提供了一个符合该协议的实现。...在方法二中,使用了自定义的TaskMeta元类, 当这个抽象类被创建时引发TypeError错误。...当没有实现run方法的子类实例化时会报错,给出的错误信息与实例化Task类时给出的一样,逻辑上完全符合预期。
把协议当作正式接口 repr reprlib.repr用于生成大型结构或递归结构的安全表示形式。 它会限制输出字符串的长度,用「…」表示截断的部分。...注意:调用__repr__函数的目的是调试,因此绝对不能抛出异常,尽量输出有用的内容,让用户能够识别目标对象。 协议 在面向对象编程中,协议是非正式的接口,只在文档中定义,在代码中不定义。...协议是非正式的,没有强制力,因此如果知道类的具体使用场景,通常只需要实现一个协议的部分。...切片对象具有仅会返回对应参数值(或其默认值)的只读数据属性 start, stop 和 step。它们没有其他的显式功能;不过它们会被 NumPy 以及其他第三方扩展所使用。...切片对象也会在使用扩展索引语法时被生成。例如: a[start:stop:step] 或 a[start:stop, i]。
解决这一问题的常用方法是定义私有数据成员,然后设计公开的成员方法来提供对私有数据成员的读取和修改操作,修改私有数据成员时可以对值进行合法性检查,提高了程序的健壮性,保证了数据的完整性。...: File "", line 1, in t.value = 5 AttributeError: can't set attribute >>>...call last): File "", line 1, in del t.value AttributeError: can't delete...#152>", line 1, in del t.value AttributeError: can't delete attribute 当然,也可以将属性设置为可读、可修改...__value) AttributeError: 'Test' object has no attribute '_Test__value' >>> t.value =1 #为对象动态增加属性和对应的私有数据成员
可以使用local()内置函数来查看这些内置异常,如下所示: >>> locals()['__ builtins__'] 这将返回内置异常,函数和属性的字典。...此类负责使用传递的参数使用str()创建异常的字符串表示形式。如果没有参数,则返回一个空字符串。 args: args是提供给异常构造函数的参数的元组。...当属性引用或分配失败(例如,引用了不存在的属性)时,将引发AttributeError。...,当找不到模块时,import会引发该子类。...当解释器检测到超过最大递归深度时,将引发此异常。 异常ReferenceError 当在垃圾回收之后使用弱引用代理访问引用对象的属性时,引发ReferenceError。
但是运行了如下代码的时候,它竟然提示:AttributeError: module ‘json’ has no attribute ‘loads’,翻译成汉语的意思是:属性错误:json模块中没有loads...然而,在使用json模块时,开发者可能会遇到AttributeError: module ‘json’ has no attribute 'loads’的错误。...这意味着在尝试使用一个不存在的属性或方法。 二、可能的错误原因 错误的模块名称 可能是我们错误地引用了json模块。...模块时,使用了错误的导入方式。...所以以后需要注意以下几点: 确保在导入模块时使用正确的模块名,避免使用错误的模块或拼写错误。 在调用模块属性或方法时,使用正确的属性或方法名,避免拼写错误。
6.4 特性(property) 1 什么是特性property property是一种特殊的属性,访问它时会执行一段功能(函数)然后返回值 import math class Circle:... 注意:此时的特性arear和perimeter不能被赋值 c.area=3 #为特性area赋值 ''' 抛出异常: AttributeError: can't set attribute '''...2 为什么要用property 将一个类的函数定义成特性以后,对象再去使用的时候obj.name,根本无法察觉自己的name是执行了一个函数然后计算出来的,这种特性的使用方式遵循了统一访问的原则 除此之外...不说“女儿”,就像“parent”本来是“父母”的意思,但中文都是叫“父类”)公开 【private】 这种封装对谁都不公开 python并没有在语法上把它们三个内建到自己的class机制中,在C++...里一般会将所有的所有的数据都设置为私有的,然后提供set和get方法(接口)去设置和获取,在python中通过property方法可以实现 class Foo: def __init__(self
为了对付表单提交时参数多和 json 结构复杂的情况,我写了一个名为 recursive_json_loads 的处理函数来对请求对象递归调用 json.loads() 以期能够一次性将所有参数转化为更好用的...self[key] 改成 self.get(k),从而避免在访问不存在的值时触发属性异常。...k=0) 有一点需要注意的是,对于传了参数而没有传值的情况(?k=),k 的值会是 ”,而且 isinstance(”, str) 会返回 True。...= ” and not isinstance(data.k, int): return error() 因为 Python 会把很多种如 len() 为零的对象的布尔值判断为 False,所以上面始终没有使用...补充,Storage 类的一个缺点是:他有 __dict__ 属性,但该属性永远为空 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。
每次给属性赋值的时候,都会调用这个方法。..._buffers[name]=None 最后一种情况: 就是 普通的属性了。...__dict__ 中没有的键所对应的值的时候,就会调用这个方法 因为 parameter, module, buffer 的键值对存在与 self._parameters, self...._modules, self.buffer 中,所以,当想获取这些 值时, 就会调用这个方法。...还需要 设置 输入 Variable的volatile 属性为 True。
前排提示,文中有一部分 candump 放在后台执行是因为我当时想不到发送的时候同时监视 candump 的方法,只能先写到日志里然后发完指令后查看日志文件后来发现竟然有 python-can 这个库,...在 CAN 接口上定期发送的 CAN 帧的仲裁 ID 是什么?...想要看 CAN 总线上发的什么可以使用 candump 指定特定的 CAN 接口,监听 CAN 总线上的数据,可以看到定期发送的 CAN 数据,ID 为 59E,因此 flag 为 59EData Field...在 CAN 接口上定期发送的 CAN 帧的数据字段中有多少字节数据?...在 CAN 接口上定期发送的 CAN 帧的数据字段的值是多少?
领取专属 10元无门槛券
手把手带您无忧上云