Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> super(), ? 
V
    Опции темы
setq
Дата 9.8.2006, 17:56 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Не могу разобраться с функцией super(). Насколько я понимаю у неё 3 (!) варианта. Очень бы хотелось разобраться что они все делают:
Код

super(myType)
super(myType, myObject)
super(myType1, myType2)

Заранее огромное всем спасибо.
  Вверх
slav0nic
Дата 9.8.2006, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



pydoc super =)
class super(object)
 |  super(type) -> unbound super object
 |  super(type, obj) -> bound super object; requires isinstance(obj, type)
 |  super(type, type2) -> bound super object; requires issubclass(type2, type)
 |  Typical use to call a cooperative superclass method:
 |  class C(B):
 |      def meth(self, arg):
 |          super(C, self).meth(arg)

сам никогда не юзал, ерунда эти всякие суперклассы и тп, хотя если кто-то привидёт примёр, где эта ф-ция будет к месту - буду благодарен)
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
J2A
Дата 10.8.2006, 06:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 17.11.2005
Где: Омск

Репутация: 16
Всего: 18



Я видел, что ее применяют в таких случаях:

Код

class MyClass(Parent):
    def method(self, *args, **kwargs):
        # make something ...
        Parent.method(self, *args, **kwargs)


Код

class MyClass(Parent):
    def method(self, *args, **kwargs):
        # make something ...
        super(Parent, self).method(*args, **kwargs)


На практике я использую 1-ый вариант.
--------------------
Be easy, stay cool
PM MAIL WWW Jabber   Вверх
slav0nic
Дата 10.8.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 17.5.2006

Репутация: 4
Всего: 5



по-моему этот super() - совершенно лишняя ф-ция, ибо первый вариант читаемей, понятней и короче%)
--------------------
                                 python.com.ua 
PM MAIL WWW Jabber   Вверх
pythonwin
Дата 10.8.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(slav0nic @  10.8.2006,  17:29 Найти цитируемый пост)
по-моему этот super() - совершенно лишняя ф-ция, ибо первый вариант читаемей, понятней и короче%) 


Эта функция прим-ся TG в widget-ах

например форма (класс в forms.py):

Код

#############################################################################
# Forms                                                                     #
#############################################################################
class Form(FormFieldsContainer):
    form = True
    name = "form"
    member_widgets = ["fields", "hidden_fields", "submit"]
    params = ["action", "method", "form_attrs", "submit_text",
              "disabled_fields"]
    params_doc = {'action' : 'Url to POST/GET the form data',
                  'method' : 'HTTP request method',
                  'form_attrs' : 'Extra (X)HTML attributes for the form tag',
                  'submit_text' : 'Text for the submit button',
                  'disabled_fields' : 'List of names of the fields we want to '
                                      'disable'}
    fields = []
    hidden_fields = []
    submit = SubmitButton()
    action = None
    method = "post"
    form_attrs = {}
    submit_text = None
    disabled_fields = set()

    def update_params(self, d):
        super(Form, self).update_params(d)
        # A form is always at the beginning of the path so we just
        # use its name
        d["name"] = self.name
        visible_fields = []
        hidden_fields = []
        for field in d["fields"] + d["hidden_fields"]:
            if field.name not in d["disabled_fields"]:
                if getattr(field, "hidden", False):
                    hidden_fields.append(field)
                else:
                    visible_fields.append(field)
        d["fields"] = visible_fields
        d["hidden_fields"] = hidden_fields
        if self.file_upload:
            d["form_attrs"]['enctype'] = "multipart/form-data"

    def validate(self, value, state=None):
        if self.validator:
            return self.validator.to_python(value, state)

    def field_for(self, item):
        import warnings
        warnings.warn(
            "Use of field_for() is deprecated and highly discouraged, "
            "use display_field_for() or render_field_for() instead. "
            "Note: this warning will be removed once 1.0 is "
            "released and your actual code will stop working.",            
            DeprecationWarning, 2)
        return self.get_field_by_name(item, "Field for '%s' not found." % item)

    def _get_errors(self):
        return getattr(request, "validation_errors", None)
    errors = property(_get_errors)


PM WWW GTalk Jabber   Вверх
Artemios
Дата 14.8.2006, 00:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 405
Регистрация: 14.8.2006
Где: Саратов, Россия

Репутация: 18
Всего: 50



Цитата(pythonwin @ 10.8.2006,  10:55)
Код

...
    def update_params(self, d):
        super(Form, self).update_params(d)
...


Не совсем понял, Form -- это у нас получается не класс виджета, а метакласс, генерящий классы виджетов?

Это сообщение отредактировал(а) Artemios - 14.8.2006, 02:59


--------------------
fib = 1: 1: [ x+y | (x,y) <- zip fib (tail fib) ]
PM MAIL   Вверх
pythonwin
Дата 14.8.2006, 07:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



класс Form генерит объекты формы, а на основе класса Form можно создать потомок, например TableForm:
Код

class TableForm(Form):
    template = """
    <form xmlns:py="http://purl.org/kid/ns#"
        name="${name}"
        action="${action}"
        method="${method}"
        class="tableform"
        py:attrs="form_attrs"
    >
        <div py:for="field in hidden_fields" 
            py:replace="field.display(value_for(field), **params_for(field))" 
        />
        <table border="0" cellspacing="0" cellpadding="2" py:attrs="table_attrs">
            <tr py:for="i, field in enumerate(fields)" 
                class="${i%2 and 'odd' or 'even'}"
            >
                <th>
                    <label class="fieldlabel" for="${field.field_id}" py:content="field.label" />
                </th>
                <td>
                    <span py:replace="field.display(value_for(field), **params_for(field))" />
                    <span py:if="error_for(field)" class="fielderror" py:content="error_for(field)" />
                    <span py:if="field.help_text" class="fieldhelp" py:content="field.help_text" />
                </td>
            </tr>
            <tr>
                <td> </td>
                <td py:content="submit.display(submit_text)" />
            </tr>
        </table>
    </form>
    """
    params = ["table_attrs"]
    params_doc = {'table_attrs' : 'Extra (X)HTML attributes for the Table tag'}
    table_attrs = {}


PM WWW GTalk Jabber   Вверх
setq
Дата 17.2.2010, 21:58 (ссылка)    |    (голосов: 1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Благодаря статье http://www.artima.com/weblogs/viewpost.jsp?thread=236275 и документации к 2.6 наконец-то разобрался в теме. Чувствую себя локальным богом)
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0513 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.