lauyukit
关于Python自己写的模块的问题

本帖最后由 lauyukit 于 2013-7-17 00:29 编辑

自学python一星期了,最近在写一个简单地记录信息的类似于电话簿的程序。

问题简单来说是这样:

我写了一个类Person,并在类中定义了__str__函数,使得我在print Person的对象时能够按照我的需要输出。

然后我在类的下面写了主程序,在里面创建了一个名为Book.data的文件。接着,我创建了一个名为book的

字典(book = {}),再把book['Frost'] = Person('Frost'). 就是把Person的对象与'Frost'对应起来。我把

book保存在了Book.data里。后来我另外写了个小程序去读取Book.data(详细如下)

[mw_shl_code=python,true]#!/usr/bin/python

# Filename: test.py

import person

import cPickle as p

f = file('Book.data', 'w')

book = p.load(f)

print book

f.close()[/mw_shl_code]

本来预期结果是

('Frost' : 'Frost ...(省略)')

但是却报错提示

Traceback (most recent call last):

File "C:\Users\Frost\Desktop\test.py", line 6, in *本站禁止HTML标签噢*

book = p.load(f)

AttributeError: 'module' object has no attribute 'Person'

我知道import Person后,使用Person的函数必须要通过person.function()这种形式去调用

我想知道的是,要怎么解决这问题呢?或许是我本来这样封装类的做法不对,我有C++的基础.....

跪求大大指导!!!!

不知道@南南 和Whisper版主会不会呢.....来救救我..@@9!!

lauyukit
也发出来看看
展开Biu

amosJi 发表于 2013-7-17 09:57

把person.py也发出来看看~

不用啦楼下有解决方法了谢谢!

[查看全文]
lauyukit
类名称必须对应
展开Biu

foodszhu 发表于 2013-7-17 10:06

from person import *。。。。或者from person import Person,类名称必须对应。。如果有包路径要去掉。

当 ...

原来如此,受教了!!非常感谢!!

[查看全文]
foodszhu
类名称必须对应
展开Biu

from person import *。。。。或者from person import Person,类名称必须对应。。如果有包路径要去掉。

当然也有改变类的方法的,pickle通过对象的__getstate__方法获取对象数据,__setstate__方法设置数据,你写一对__getstate__和__setstate__就好了

[查看全文]
amosJi
也发出来看看
展开Biu

把person.py也发出来看看~

[查看全文]