Чтобы показать, какую версию PNG dll требуется для вашей версии Emacs для Windows, вы можете оценить (cdr (assq 'png dynamic-library-alist))
В вашем коде есть аргумент по умолчанию для инициализации класса. Значение аргумента по умолчанию оценивается один раз во время компиляции, поэтому каждый экземпляр инициализируется одним и тем же списком. Измените его так:
def __init__(self, arr=None):
if arr is None:
self.array = []
else:
self.array = arr
Я обсуждал это более подробно здесь: Как определить класс в Python
Никогда не используйте изменяемое значение (например, []) для аргумента метода по умолчанию. Значение вычисляется один раз, а затем используется для каждого вызова. Когда вы используете пустой список в качестве значения по умолчанию, этот же список используется каждый раз, когда метод вызывается без аргумента, даже если значение изменяется предыдущими вызовами функций.
Сделайте это вместо:
def __init__(self,arr=None):
self.array = arr or []
Как говорит Нед, проблема в том, что вы используете список в качестве аргумента по умолчанию. Более подробная информация здесь . Решение состоит в том, чтобы изменить функцию __ init __
, как показано ниже:
def __init__(self,arr=None):
if arr is not None:
self.array = arr
else:
self.array = []
Три периода после финала тип параметра указывает, что последний аргумент может быть передан как Этот подход не всегда правильный ответ: в других случаях лучше «если не Нет». Просто спросите себя: я передаю набор объектов или изменяемый контейнер? Если класс / функция, в которые я передаю свои объекты, изменяет хранилище, которое я ему предоставил, будет ли это (а) удивительным или (б) желательным? В этом случае я бы сказал, что это (а); таким образом, вызов list (...) - лучшее решение. Если (б), «если не Нет» было бы правильным подходом.