Я недавно решил начать изучение python. В течение большей части моего времени я использовал C++, и некоторые вещи меня очень сбивают с толку.Правильный способ мутации инициализированных объектов в python
Вот мой код, который у меня есть проблема с (полный код здесь: http://pastebin.com/tj3qJnvM)
class Display:
def __init__(self, background):
resolution = (800, 600)
screen = pygame.display.set_mode(resolution)
background = pygame.Surface(screen.get_size())
background.fill((255, 255, 255))
background = background.convert()
def init(map, background):
pygame.init()
display = Display(background)
map.draw(background)
def main():
background = None
init(map, background)
Когда я называю display = Display(background)
в init
(строка 61), он должен инициализировать фон, поэтому он может быть использован на следующей линия. Вместо этого я получаю сообщение об ошибке «Нет».
Если я правильно понял это из-за того, что фон был установлен на None, а None не изменен, поэтому он создает локальный фон переменной в конструкторе Display.
Как подойти к этой ситуации?
Я знаю, что было бы лучше сделать фон членом класса Display, но я хочу понять, как создать нечто похожее на объявление указателя/ссылки в C. И затем инициализировать его в некоторой функции. Было бы полезно передать его затем некоторым функциям.
Возможно ли это в python или это обходное решение необходимо каждый раз?
Пожалуйста, положите [mcve] в вопрос. Также вы не используете 'self.', поскольку я предполагаю, что это атрибуты экземпляра; прочитайте учебник. – jonrsharpe
Извините, теперь пример должен быть более читаемым. Я хочу инициализировать фон из основного внутри другой функции, поэтому я не хочу использовать self в этом случае. – Thun
Возможно, вы прочитали [раздел 9, Классы] (https://docs.python.org/3/tutorial/classes.html) учебника. Похоже, вам нужно потратить немного времени на изучение того, как делать вещи на Python. , '' 'display''' является экземпляром' '' Display''', и к его атрибутам обращается '' 'display.attribute'''. - Но так, как вы написали свой класс, нет никаких атрибутов экземпляра. Вероятно, вы также должны прочитать [имя и привязку] (https://docs.python.org/3/references/executionmodel.html#naming-and-binding). – wwii