如何泡菜的對象的子類,但只能捕捉到它的超類的變量(和轉換對象超類)。的Python酸洗變量只有在超
的原因,我這樣做是因爲我有我需要創建我的「類」,但需要一個輕量版本時,我讀它的額外信息。
例子:
import cPickle
def unpickle_me(filename):
myobj= cPickle.load(open(filename, "rb"))
return myobj
def pickle_me(obj, filename):
cPickle.dump(obj, open(filename, "wb"))
class A(object):
def __init__(self):
self.a = []
def read_index(self, index):
return self.a[index]
class B(A):
def __init__(self, b):
super(B, self).__init__()
self.b = b; # let b = 3 for example
def add_to_super(self, avar):
self.a.append(avar*self.b)
classB = B(3)
classB.add_to_super(5)
pickle_me(classB, 'me_b.pickle')
myobj = unpickle_me('me_b.pickle')
print(type(myobj), myobj.__dict__)
>>>> (<class '__main__.B'>, {'a': [15], 'b': 3})
所以酸洗作品!它醃製我所期望的。但在現實中,我希望更多的東西一樣:
pickle_me(classB, 'me_b.pickle')
myobj = unpickle_me('me_b.pickle')
print(type(myobj), myobj.__dict__)
>>>> (<class '__main__.A'>, {'a': [15]}) # class A and only has A
作爲獎勵,誰打開它無法「追加」雖然我的「add_to_super」另一個值至A。
問題: 1.有沒有辦法做到這一點?我願意寫__兩個A類和B類
如果我使用有getstate __ __ __有getstate信息,有沒有辦法自動不但節省我在A級分配變量?所以我不需要說出自我。 __ __字典[「B」]
我可以寫一個特殊的方法,可以讓我選擇我要的是哪個版本?像泡菜只是一個信息或鹹菜B信息(給B類時)
側面的問題:我需要在這種情況下定義__ setstate __嗎?或者單獨使用__ getstate __?
此外,我在這裏實現了結構OO很爛,也不會介意任何指針。
我對OOP的指針 - 你'print'語法上看,你是使用Python 3.x的在Python 3.x.中,不需要從'object'繼承類。你只在Python 2.x中做到了這一點。使班級成爲「新式」班級。在Python 3.x中。然而,_all_類是「新風格」。 – iCodez
@iCodez - 'cPickle'另一方面會提示python2 – mata