我是python的新手:我想在python中序列化和反序列化我的自定义对象。请同样指导我。我有一个示例课:
import pickle
import json
class MyClass():
variable = "blah"
num = 10
def function(self):
print("this is a message inside the class.")
def get_variable():
return variable
def get_num():
return num
def main():
myObj = MyClass()
with open('/opt/infi/deeMyObj.txt', 'w') as output:
pickle.dump(myObj, output,pickle.HIGHEST_PROTOCOL)
with open('/opt/infi/deeMyObj.txt', 'r') as input:
myObjread = pickle.load(input)
print myObjread.get_variable()
print myObjread.get_num()
main()
我遇到以下错误:
回溯(最近通话最近一次):
文件“ sample.py”,第30行,位于
main()
文件“ sample.py”,主行,第27行
print myObjread.get_variable()
TypeError:get_variable()不接受任何参数(给定1个)
主要目的是读回该对象。
答案 0 :(得分:0)
要在jasonharper's comment上进行扩展,您的get_variable
和get_num
方法未引用类的成员变量。他们应将对象作为第一个参数,例如
class MyClass:
...
def get_variable(self):
return self.variable
我认为您的序列化代码还可以,但是我可能错了。
(放在一边)
这有点题外话,但要注意另一件事:当您直接在class
块中定义变量时,它们是在类上定义的,而不是在该类的对象上定义的。在这种情况下,这种情况确实可以解决,因为如果Python在对象上找不到一个同名的类级变量,它将寻找它。但是,如果您将列表存储在其中一个列表中并开始对其进行修改,那么最终将在对象之间共享它,这可能不是您想要的。相反,您想在__init__
方法中对其进行定义:
class MyClass:
def __init__(self):
self.variable = "blah"