На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: RaD
  
    > вызов метода предка, Python 2.7
      на Python 3.7 OK
      ExpandedWrap disabled
        class Person():
            def __init__(self, name, age):
                self.name = name
                self.age = age
         
        class JavaDrocher(Person):
            def __init__(self, name, age, grade):
                super().__init__(name, age)
                self.grade = grade
         
        gregory = JavaDrocher('Gregory', 42, 10)

      но в Python 2.7 не работает! Пробовал вот так
      ExpandedWrap disabled
        class JavaDrocher(Person):
            def __init__(self, name, age, grade):
                super(JavaDrocher, self).__init__(name, age) # не работает!
                self.grade = grade
         
        gregory = JavaDrocher('Gregory', 42, 10)

      ошибка 'TypeError: must be type, not classobj'
      Rabbit don't come easy: https://github.com/Cfon/ :D
        Думаю надо
        ExpandedWrap disabled
          class Person(object):
        ибо без object -- старый стиль определения класса (в 2.7 само-собой)
        Сообщение отредактировано: piksel -
          Цитата piksel @
          ибо без object -- старый стиль определения класса
          В Python 3000 (версии 3.*) разницы нет, оба определения эквивалентны. В 2.7, помнится, существуют две разновидности классов legasy - унаследованные от старых версий, и новые, подобные классам Python 3000. Соответственно отличается и наследование. Правда, чем отличается их определение, уже не помню.
          Всё написанное выше это всего лишь моё мнение, возможно ошибочное.
            Цитата piksel @
            Думаю надо
            ExpandedWrap disabled
              class Person(object):
            ибо без object -- старый стиль определения класса

            Бинго! :D

            Спасибо! Заработало!

            Цитата
            in Python 2 we have to inherit from object explicitly, otherwise our class will be almost completely empty except for our own custom properties. Classes which don’t inherit from object are called “old-style classes”, and using them is not recommended. If we were to write the person class in Python 2 we would write the first line as class Person(object):.


            Цитата
            в Python 2 мы должны явно наследовать object, иначе наш класс будет почти полностью пуст, за исключением наших собственных пользовательских свойств. Классы, которые не наследуются object, называются "классами старого стиля", и их использование не рекомендуется. Если бы мы написали класс person в Python 2, мы бы написали первую строку как class Person(object):


            https://python-textbok.readthedocs.io/en/1.0/Classes.html
            Сообщение отредактировано: Cfon -
            Rabbit don't come easy: https://github.com/Cfon/ :D
              Еще один способ вызвать метод предка
              ExpandedWrap disabled
                class JavaDrocher(Person):
                    def __init__(self, name, age, grade):
                        Person.__init__(self, name, age)
                        self.grade = grade

              Где-то я уже похожее видел догадайтесь где :D
              Rabbit don't come easy: https://github.com/Cfon/ :D
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script Execution time: 0,0845 ]   [ 14 queries used ]   [ Generated: 21.05.19, 20:56 GMT ]