【发布时间】:2014-05-10 16:08:00
【问题描述】:
我需要保护一个类变量。但是如果类支持保存和加载选项怎么办?
import numpy as np
import pickle
class data(object):
def __init__(self):
self.__a = range(100)
@property
def a(self):
return self.__a
def save(self, path):
pickle.dump(self,open(path, 'wb'), protocol=2)
def load(self, path):
obj = pickle.load(open(path, 'wb'))
self.__a = obj.a
这很简单,但 __aattribute 不再受到保护,因为调用 instance.a 会返回确切的 instance.__a 列表,并且它可以从外部更改,这在我的情况下是危险的。
有没有办法解决这个问题?
【问题讨论】:
-
在 python 中没有保护。即使在外面,您也可以随时更改
__a。 -
属性与保存/加载有什么关系?
-
是的,但您无权访问它。尝试 instance.__a 并被 AttributeError 拒绝
-
试试
_data__a,你就可以访问__a。
标签: python numpy pickle private-members