Buenas.
Lo que ocurre es que en realidad
self no significa nada para Python,
self se utiliza por convención, por lo cual, cuando tu haces esto ...
self = load(f)
... lo único que estas haciendo es modificar el valor de la variable, si pones un string, entonces será un string, pero eso no significa que el objeto ha cambiado porque de por si no es un puntero a memoria.
Lo que debes de hacer es
modificar los atributos del objeto actual, con los atributos del objeto cargado
from pickle import load, dump
class Auto:
def __init__(self):
try:
self.load()
except:
self.counter = 0
def load(self):
with open(self.__class__.__name__, 'rb') as f:
self.__dict__ = load(f).__dict__
def dump(self):
with open(self.__class__.__name__, 'wb') as f:
dump(self, f)
class Test(Auto):
def increment(self):
self.counter += 1
print(self.counter)
self.dump()
if __name__ == "__main__":
t = Test()
t.increment()
Saludos