У меня есть родительский класс BaseResource
, в котором я определяю поведение, которое должно быть общим для всех дочерних. Я переписываю ModelResource.update_in_place
, который определен в некоторой модели django-tastypie.Как получить тип класса от родителя
class BaseResource(ModelResource):
def update_in_place(self, ...):
...
return super(ChildResource, self).update_in_place(...)
Теперь у меня есть Child1Resource
, Child2Resource
которые оба унаследовать от BaseResource
. Как я могу получить тип дочернего ресурса внутри родителя?
Я пробовал self.__class__()
, но получаю must be type, not Child1Resource
.
Но почему это не по умолчанию? Поскольку первый параметр должен * a lways * имя 'self', почему мы должны его указывать? –
@MathieuMarques: [Это в Python 3] (https://www.python.org/dev/peps/pep-3135/). Еще одна причина для обновления. – Kevin
@MathieuMarques: первым параметром всегда должен быть класс, в котором 'super()' вызывается_, но я предполагаю, что вы имеете в виду второй параметр? Если да, прочитайте документ для 'super()': это может быть «Нет», экземпляр или класс (для классов). Чтобы правильно работать (т. Е. Обеспечить вызовы всех «супер» методов в правильном порядке), 'super' должен знать как класс, так и экземпляр, на который был вызван метод, и класс, в котором вызывается' super'. Реализация Python2 решила его простейшим, явным, но не сухим способом, Python3 улучшил его, чтобы сделать его DRYer. –