Заменить экземпляр класса функцией внутри класса (python) - PullRequest
1 голос
/ 19 июня 2020

Я хочу заменить экземпляр класса «модель» новым экземпляром. Это должно происходить в функции сброса внутри класса. Я мог бы легко сделать model = Model(number = 2) вне класса, но это не то, что мне нужно.

Число - это просто простой пример для вас. Моя настоящая задача совершенно другая. Итак, мне нужно создать новый экземпляр с тем же именем, потому что мне нужен новый запуск __init__. И это должно происходить внутри функции сброса . Надеюсь, вы понимаете, о чем я. Моя функция reset, к сожалению, не работает:

class Model():
    def __init__(self, number):
        self.number = number

    def reset(self):
        self = Model(number = 2)

model = Model(number = 1)
print(model.number) #it is 1

model.reset()
print(model.number) #it is 1 aswell, should be 2 :(

Ответы [ 3 ]

2 голосов
/ 19 июня 2020

Вы не можете переназначить себя вне своего класса, но вы можете сделать что-то вроде этого:

class Model():
    def __init__(self, number):
        self.number = number

    def reset(self):
        self.__dict__ = Model(number = 2).__dict__

model = Model(number = 1)
print(model.number) #it is 1

model.reset()
print(model.number) #it is 2 :)

Подробнее о dict attribute здесь

1 голос
/ 19 июня 2020

Что насчет этого здесь? Можно ли запустить руководство init в функции reset?

class Model():
    def __init__(self, number):
        self.number = number

    def reset(self):
        self.__init__(2)

model = Model(number = 1)
print(model.number) #it is 1

model.reset()
print(model.number) #it is 2 now
0 голосов
/ 19 июня 2020

Я хочу заменить экземпляр класса «модель» новым экземпляром.

Все, что вам нужно сделать, это заново привязать имя model.

Используйте

model = Model(number=2)

или

model = Model(model.number + 1)

Если вы хотите автоматически увеличивать number при создании экземпляра, вы можете использовать что-то вроде этого:

class Model:
    counter = 1

    def __init__(self):
        self.number = Model.counter
        Model.counter += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...