Правильный способ редактирования существующей сущности в tipfy - PullRequest
0 голосов
/ 31 июля 2010

Я использую PersonEditHandler класс в tipfy для редактирования лица. я имею методы get () и post () сформировались, но когда я ссылаюсь на self.person (чтобы проверить, нашел ли метод get существующего человека по ключу), я получаю 'объект не имеет атрибута' ошибка.

Это потому, что я никогда не инициализирую его в методе init , так как я наследую от RequestHandler и Jinja2Mixin . Однако когда я переопределяю init , я получаю еще одну ошибку: 'TypeError: init () принимает ровно 1 аргумент (задано 3)'

Вот код:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    def __init__(self): 
        PersonEditHandler.__init__(self) 
        # ...or 'super(PersonEditHandler, self).__init__()' 
        self.person = None 

У меня проблемы из-за множественного наследования? Что лучше способ отредактировать найденную запись в tipfy без создания новой?

1 Ответ

1 голос
/ 01 августа 2010

Я бы порекомендовал отказаться от __init__ и добавить атрибут класса:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    person = None

Таким образом, когда вы получаете доступ к a self.person, который никогда не был установлен на конкретном экземпляре self, он будет передан классу, и вы получите None по желанию; когда вы установите self.person, он установит его на объекте, как вам нужно.

Множественное наследование с помощью миксинов в целом нормально, но оно может создать несколько мутные проблемы с __new__ и __init__, как вы заметили (честно говоря, я понятия не имею , что такое класс скулить по поводу получения трех аргументов здесь ... хотя было бы полезно, если бы вы показали полный возвратный путь, обдумать проблему, как я только что предложил, проще; -).

...