首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >python泡菜上的命名空间

当我用泡菜和单品一起使用时,我犯了一个错误。

我写了3个程序文件:

  1. 表示要腌制的类,
  2. 用于使用#1中类的类,
  3. 单元测试用于测试类2.

实码分别如下。

#1. ClassToPickle.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pickle
class ClassToPickle(object):
    def __init__(self, x):
        self.x = x
if __name__=="__main__":
    p = ClassToPickle(10)
    pickle.dump(p, open('10.pickle', 'w'))

#2. SomeClass.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from ClassToPickle import ClassToPickle
import pickle

class SomeClass(object):
    def __init__(self):
        self.pickle = pickle.load(open("10.pickle", 'r'))
        self.x = self.pickle.x
        print self.x

if __name__ == "__main__":
    SomeClass()

#3. SomeClassTest.py

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import unittest
from SomeClass import SomeClass
from ClassToPickle import ClassToPickle # REQUIRED_LINE

class SomeClassTest(unittest.TestCase):
    def testA(self):
        sc = SomeClass()
        self.assertEqual(sc.x, 10)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

我首先运行#1程序来制作泡菜文件。

然后,当我单独运行程序文件#2 (即输入"python SomeClass.py")时,它就能工作了。

而且,当我单独运行程序#3 (即输入"python SomeClassTest.py")时,它也能工作。

然而,当我在eclipse+pydev中以“单元测试”的形式运行程序#3时,它会在下面返回一个错误消息。

======================================================================

错误: testA (SomeClassTest.SomeClassTest)跟踪(最近一次调用):

$ File“/home/tmp/泡菜问题/SomeClassTest.py”,第9行,在testA中

sc = SomeClass()

$ File“/home/tmp/泡菜问题/SomeClass.py”,第8行,在init

self.pickle =pickle.load(打开(“10.泡菜”,'r'))

$ File“/usr/lib/python2.7/泡菜. in”,第1378行,加载

返回Unpickler(文件).load()

$ File“/usr/lib/python2.7/泡菜. in”,第858行,装载

调度员

文件“/usr/lib/python2.7/泡菜. in”,第1090行,在load_global中

klass =self.find_class(模块,名称)

$ File“/usr/lib/python2.7/泡菜. in”,第1126行,find_class

klass = getattr(mod,name)

$ AttributeError:‘模块’对象没有属性'ClassToPickle‘在0.002 s失败(errors=1)中运行1测试

而且,当我注释掉导入ClassToPickle类的一行(程序#3中的第3行,并注释为"REQUIRED_LINE")时,它无法工作,并返回下面描述的错误消息。

E

======================================================================

错误:(main.SomeClassTest)跟踪(最近一次调用):

文件"SomeClassTest.py",第9行,testA

sc = SomeClass()

init中的“/home/tmp/泡菜问题/SomeClass.py”文件,第8行

self.pickle =pickle.load(打开(“10.泡菜”,'r'))

文件“/usr/lib/python2.7/泡菜. in”,第1378行,加载

返回Unpickler(文件).load()

文件“/usr/lib/python2.7/泡菜. in”,第858行,装载

调度员

文件“/usr/lib/python2.7/泡菜. in”,第1090行,在load_global中

klass =self.find_class(模块,名称)

文件“/usr/lib/python2.7/泡菜. in”,第1126行,在find_class中

klass = getattr(mod,name)

AttributeError:‘模块’对象没有属性'ClassToPickle‘在0.001s失败(errors=1)中运行1测试

我想问题是关于python中的命名空间,但我不知道到底发生了什么,我能做些什么来解决它。

我如何“以单元测试(在eclipse+pydev中)运行”#3程序正确,

并在没有导入ClassToPickle的行的命令行中运行#3程序?

请帮帮我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-28 04:00:41

因为__main__.ClassToPickle != ClassToPickle.ClassToPickle,把它想成这样:

当您在ClassToPickle脚本中对类实例进行腌制时,泡菜模块将对类的所有引用进行筛选,这意味着它将对定义类的模块名进行筛选,而且由于您执行了脚本ClassToPickle.py,这意味着模块将被设置为__main__,这意味着pickle模块将对__main__.ClassToPickle进行筛选。

当您试图加载已被腌制的实例时,它失败了,因为它没有找到实例的类,即__main__.ClassToPickle,而不是使用from ClassToPickle import ClassToPickle导入的类,因为最新的是ClassToPickle.ClassToPickle

修复方法是创建另一个处理转储的脚本,而不是在ClassToPickle.py中执行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pickle

from ClassToPickle import ClassToPickle

if __name__=="__main__":
    p = ClassToPickle(10)
    pickle.dump(p, open('10.pickle', 'w'))
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7928450

复制
相关文章
pickle.load()函数
此函数和 dump() 函数相对应,用于将二进制对象文件转换成 Python 对象。该函数的基本语法格式为:
用户8442333
2021/11/30
9.3K0
如何保存机器学习模型
这篇文章主要介绍持久化存储机器学习模型的两种方式:pickle和joblib,以及如何DIY自己的模型存储模块。
MeteoAI
2019/08/21
2.6K0
如何保存机器学习模型
python 序列化数据:pickle与json ,dumps与loads,解决can't pickle _thread.lock objects
pickle 只能在python中用python文件间序列化,实现了两个python 内存数据的交互(可序列化任何对象(类,列表)) json 在任何软件间可以在内存数据之间的交互,只能序列化常规的对象(列表 ,字典等)
学到老
2019/02/14
6.8K0
使用文件和目录属性和属性
%Library.File类还提供了许多类方法,可以使用这些方法来获取有关文件和目录的信息,或者查看或设置它们的属性和属性。
用户7741497
2022/07/05
6900
childNodes属性和nodeType属性
解析 1.childNodes:获得元素的所有子元素,返回的是一个数组, 2.nodeType:代表元素的节点类型, a.元素节点返回值是1; b.属性节点返回的值是2; c.文本节点返回的值是3. <style> *{ margin: 0; padding: 0; } ul{ list-style: none; } a{
天天_哥
2018/09/29
1.1K0
实例属性和类属性
实例属性   由于Python是动态语言,根据类创建的实例可以任意绑定属性   实例绑定属性的方法     1) 通过实例变量     2) 通过self变量
py3study
2020/01/15
1.1K0
Swift计算属性和存储属性
由此看出,存储属性可以直接读写赋值。计算属性不能直接对其操作,其本身只起计算作用,没有具体的值。
Light413
2020/04/08
2.2K0
Swift计算属性和存储属性
无服务器的十大属性
无服务器计算或函数即服务(FaaS)正在不断,亚马逊正在通过将Lambda扩展到边缘设备和内容分发网络来推动创新。IBM, Microsoft和Google在公共云中拥有自己的FaaS产品,有超过六个开源无服务器项目正在引起开发人员的注意。预计今年将出现这一细分市场中出现的新平台。
lyb-geek
2022/03/10
1.4K0
python 公有属性和私有属性
------------------------------------------------------------------
py3study
2020/01/13
1.2K0
js nextSibling属性和previousSibling属性
该属性表示当前节点的下一个节点(其后的节点与当前节点同属一个级别);如果其后没有与其同级的节点,则返回null。
全栈程序员站长
2022/09/14
6.8K0
python类属性和实例属性
    python中的类属性只是存储与类相关的数据,和该类的实例无关。类属性和java中的静态成员变量类似。访问python的类属性可使用类名+“.”+属性名的方式,如果类的实例没有同名变量也可以使用实例来访问。如果实例含有与类属性同名的属性,则用该实例访问属性时,访问的是实例中的属性。
py3study
2020/01/06
9830
Python的实例属性和类属性
类属性指的是定义在class内部的,而实例属性是则与某个特定的实例(对象)有关。定义过于抽象了,看看例子。
哒呵呵
2018/08/06
7400
JavaScript数据属性和访问器属性
看《深入理解JavaScript》的this篇时看到“访问器属性”这个不熟悉的名词,百度后找到两篇感觉比较合适的文章,整合记录一下,以参考资料2为主,参考资料1为辅助补充。
WindCoder
2018/09/20
1.6K0
python_类属性和实例属性
到这里就可以完满解释上面的问题: 1. Python中属性的获取是按照从下到上的顺序来查找属性; 2. Python中的类和实例是两个完全独立的对象; 3. Python中的属性设置(比如赋值)是针对对象本身进行的;
py3study
2020/01/14
5950
实例属性和类属性的理解
# class fun(): # a = 1 # 类属性 # def l(self): # a = 4 # print('a') # b = fun() # print(fun.a) # class Test(object): # name = 'scolia' # # a = Test() # Test.name = 'scolia good' # 通过类进行修改类属性,成功!连实例属性都改了 # print(Test.name
汪凡
2018/05/29
6860
js类公有属性和私有属性
function Test(){ var name = 'test'//私有 this.age = 12//公有 this.getName = function(){ return name } this.getAge = function(){ return this.age } } var Test = new Test() print(Test.name)//undefined print(Test.age)//12 print(Test.getAge())//12 print
Java架构师必看
2021/08/19
5.4K0
[Genome Biology | 论文简读] metaMIC:从头宏基因组组装的无参考错误组装识别和校正
metaMIC: reference-free misassembly identification and correction of de novo metagenomic assemblies
智能生信
2022/12/29
3090
[Genome Biology | 论文简读] metaMIC:从头宏基因组组装的无参考错误组装识别和校正
html锚点id属性和name属性
刚接触HTML的时候就知道描点,所以对描点这两个字特别熟悉,但一直没用过😂。最近对模板更新时用到了这一点,举例说一下
Dabenshi
2023/08/24
3890
JPA 的 CascadeType 属性 和 FetchType属性 和 各种映射关系
代码地址:https://gitee.com/a247292980/lgp20151222 
ydymz
2018/09/10
2.1K0
Jquery attr()方法 属性赋值和属性获取
jquery中用attr()方法来获取和设置元素属性,attr是attribute(属性)的缩写,在jQuery DOM操作中会经常用到attr(),attr()有4个表达式。
软件小生活
2021/08/16
10.5K0
Jquery attr()方法 属性赋值和属性获取

相似问题

属性错误: pickle.load() Seldon部署

14

joblib.load文件加载中的错误

16

openpyxl无属性错误

20

无类型错误属性

21

获取“无属性绘制”错误

24
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文