Очистить все переменные класса между экземплярами - PullRequest
3 голосов
/ 25 марта 2010

Возможно, это глупый вопрос, но как лучше очистить переменные класса между экземплярами?

Я знаю, что могу сбросить каждую переменную в конструкторе отдельно; но есть ли способ сделать это навалом?

Или я делаю что-то совершенно не так, что требует другого подхода? Спасибо за помощь ...

class User():
    def __init__(self):
        #RESET ALL CLASS VARIABLES

    def commit(self):
        #Commit variables to database

>>u = User()
>>u.name = 'Jason'
>>u.email = 'jason.mendez@yahoo.com.mx'
>>u.commit()

Чтобы каждый раз, когда вызывался пользователь, переменные были новыми.

Спасибо.

Ответы [ 4 ]

3 голосов
/ 25 марта 2010

Если вы хотите сбрасывать значения каждый раз при создании нового объекта, вам следует использовать переменные экземпляра, а не переменные класса.

Если вы используете переменные класса и пытаетесь создать более одного пользовательского объекта одновременно, тогда один перезапишет изменения другого.

2 голосов
/ 25 марта 2010

Можете ли вы просто передать параметры в конструктор следующим образом?

class User(object):
    def __init__(self, name, email):
        self.name = name
        self.email = email
    def commit(self):
        pass

jason = User('jason', 'jason@email.com')
jack = User('jack', 'jack@yahoo.com')

Нет ничего для "сброса" в коде, который вы разместили. После создания пользователя у них даже не будет имени или атрибута электронной почты, пока вы не установите их позже. В качестве альтернативы можно было бы просто инициализировать их некоторыми значениями по умолчанию, как показано ниже, но приведенный выше код лучше, поэтому не будет никаких неинициализированных объектов User.

def __init__(self):
    self.user = None
    self.email = None
0 голосов
/ 25 марта 2010

Этот код не изменяет атрибуты name или email ни одного из экземпляров User, кроме u.

0 голосов
/ 25 марта 2010

Привязка атрибута к экземпляру создает атрибуты экземпляра, а не атрибуты класса. Возможно, вы видите другую проблему, которая не показана в коде выше.

...