Как явно не поддерживать травление? - PullRequest
0 голосов
/ 27 октября 2018

Я написал класс Python, который не может поддерживать травление.Тем не менее, время от времени пользователь пытается выбрать экземпляры этого класса, что приводит к ошибкам.Поэтому я хочу выдавать пользовательское информативное сообщение об ошибке всякий раз, когда предпринимаются какие-либо попытки выбора экземпляров моего класса.

Как мне лучше всего это делать?Меня особенно интересуют решения, которые имеют широкий охват, т. Е. Работают не только для стандартной библиотеки pickle, но и для альтернатив ей.

Что касается того, что я нашел такпока что я напишу ответ на свой вопрос , но я не уверен, что это лучший способ.

1 Ответ

0 голосов
/ 27 октября 2018

Из прочтения документации я понял, что если у класса есть метод __getstate__, он будет вызываться при попытке посадки. Поэтому решение состоит в том, чтобы переписать этот метод, чтобы вызвать исключение, например:

import pickle

class Foo(object):
    def __getstate__(self):
        raise pickle.PickleError("No pickling for Foo.")

Это похоже на работу:

some_foo = Foo()
try:
    pickle.dumps(some_foo)
except pickle.PickleError:
    print("Error raised.")
else:
    raise AssertionError("Error not raised")
...